C ++ - 将表示为字符串(" 2134628961988274893")的非常大的整数转换为二进制代码

时间:2014-12-29 21:23:00

标签: c++ string

我试图将表示为字符串的整数(“18446744073709551616”)直接转换为二进制代码(0b1000000000000000000000000000000000000000000000000000000000000000000),即将大型表示为无符号长整型int。 如果你有另一种存储大量值的方法,请告诉我。

1 个答案:

答案 0 :(得分:1)

C ++没有对任意精度整数的本机支持,但是实现这个特定用例所需的并不困难。你需要:

  1. 选择一种格式。例如,使用std::vector<unsigned char>存储基数为256的数字
  2. 在base 256
  3. 中添加两个任意精度数字
  4. 实施乘以10
  5. 然后程序变为:

    std::vector<unsigned char> res;
    res.push_back(0);
    for (int i=0,n=str.size(); i<n; i++) {
        mul10(res);
        add(res, str[i]-'0');
    }
    

    例如,add可以通过以下方式实现:

    void add(std::vector<unsigned char>& num, int digit) {
        for (int i=0,n=num.size(); digit && i < n; i++) {
            int x = num[i] + digit;
            num[i] = x & 255;
            digit = x >> 8;
        }
        if (digit) {
            num.push_back(digit);
        }
    }
    

    乘以10是通过将最低有效数字相乘,将低8位存储在数字中并保持进位x >> 8以将其添加到更高的数字。然后你将高位数相乘,加上进位,存储低8位并将新进位移动到更高的位数......