从boost multiprecision中提取位

时间:2016-03-16 13:52:41

标签: c++ boost biginteger

我正在使用uint256_t对大整数进行算术运算;我想以常规形式提取数字的位数(即不是以浮点形式),没有任何精度,因为我只使用整数而不是浮点数。

例如: 如果我的代码有:

#include <boost/multiprecision/cpp_int.hpp>    
uint256_t v = 0xffffffffffffffffffffffffffffff61;

然后我希望有32个字节:

61 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

2 个答案:

答案 0 :(得分:1)

您可以直接使用后端表示。

检查文档是否这是公共API的一部分。

<强> Live On Coliru

[^(\\x00-\\xFF)]+(?:$|\\s*)

打印

#include <boost/multiprecision/cpp_int.hpp>
#include <iostream>

int main() {
    using namespace boost::multiprecision;
    uint256_t v("0xffffffffffffffffffffffffffffff61");

    std::copy_n(v.backend().limbs(), v.backend().size(), 
        std::ostream_iterator<unsigned>(std::cout << std::hex << std::showbase, " "));
}

0xffffff61 0xffffffff 放在没有std::showbase的情况下。我选择了这种表示法,因此最清楚地了解了0x的分组方式。

答案 1 :(得分:0)

你不能直接得到你的要求。内部表达不一定以这种方式进行,一种类型使用偶数&#39;十进制&#39;位数。

您可以间接获得

uint256_t v = 0xffffffffffffffffffffffffffffff61;
std::ostringstream ost ;
ost << std::hex << v ; 

现在ost.str()是FFFF .... FFF61