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

Tar*_*rek 2 c++ algorithm numbers base-conversion

是否有一个c ++结构或模板(在任何库中)允许我在十进制和任何其他基础之间进行转换(很像bitset可以做什么)?

Ker*_* SB 5

是的,你可以使用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;
Run Code Online (Sandbox Code Playgroud)

也支持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());
}
Run Code Online (Sandbox Code Playgroud)

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

  • @pmr:还有什么?"数字基数"不是*,而是*数字的词汇表示的属性. (2认同)
  • 例如,由第k个数字(从0开始)表示的值是`((n/base ^ k)%base)*base ^ k`,因此您可以将某个数字"设置为零"并移动它在其他地方等 (2认同)