从提升多精度中提取位

Extracting bits from boost multiprecision

本文关键字:提取 精度      更新时间:2023-10-16

我正在使用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

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

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

住在科里鲁

#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.我选择了这个表示形式,以便最清楚地了解limb是如何分组的。

你不能直接得到你要求的东西。内部呈现不一定是这样完成的,一种类型甚至使用"十进制"数字。

您可以间接获得

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

现在ost.str()是FFFF。FFF61