【问题标题】:c++ template for conversion between decimal and arbitrary base用于在十进制和任意基数之间转换的 c++ 模板
【发布时间】:2012-02-10 19:27:05
【问题描述】:

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

【问题讨论】:

  • 在编译时转换,还是在运行时转换?
  • 您的意思是将任意基数中的用户定义文字转换为base10吗?

标签: c++ algorithm numbers base-conversion


【解决方案1】:

是的,你可以使用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;

也支持八进制,但对于其他基础,您最好编写自己的算法 - 它本质上是 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) 的逆函数类似。

【讨论】:

  • 在不同的基础上打印是 OP 真正想要的吗?
  • @pmr:还有什么? “数字基数”只是数字的词汇表示的属性。
  • 但他谈到了模板。所以他可能想做from_base&lt;6, intliteral_in_base_6&gt;::value之类的事情。
  • 其实我想对转换后的数字做一些操作,比如旋转数字,测试某个数字是否为零,..等等。对于 DecimalBinary,bitset 是理想的,所以我希望我能找到另一个用于任意基数的模板。或许我会使用 Kerrek 的代码并定义我自己的操作。
  • 例如,kth 数字(从 0 开始)表示的值是 ((n / base^k) % base) * base^k,因此您可以将某个数字“设置为零”并将其移动到其他位置等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 2018-01-16
  • 2013-03-14
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多