用于十进制和任意基数之间转换的c++模板

c++ template for conversion between decimal and arbitrary base

本文关键字:转换 c++ 模板 之间 十进制 任意基 用于      更新时间:2023-10-16

是否有一个c++结构或模板(在任何库中)允许我在十进制和任何其他基数之间进行转换(就像比特集可以做的那样)?

是的,您可以使用unsigned int:

unsigned int n =   16; // decimal input
unsigned int m = 0xFF; // hexadecimal input
std::cout << std::dec << "Decimal: " << n << ", " << m << std::endl;
std::cout << std::hex << "Hexadecimal: 0x" << n << ", 0x" << m << std::endl;

Octal也受到支持,尽管对于其他基础,你最好编写自己的算法——它本质上是C++中的三行:

std::string to_base(unsigned int n, unsigned int base)
{
    static const char alphabet[] = "0123456789ABCDEFGHI";
    std::string result;
    while(n) { result += alphabet[n % base]; n /= base; }
    return std::string(result.rbegin(), result.rend());
}

unsigned int from_base(std::string, unsigned int base)函数类似。