我在大端有一个boost::multiprecision::cpp_int,必须将它改为小endian。我怎么能这么做?我尝试过boost::endian::转换,但这没有起作用。
boost::multiprecision::cpp_int bigEndianInt("0xe35fa931a0000*);
boost::multiprecision::cpp_int littleEndianInt;
littleEndianIn = boost::endian::endian_reverse(m_cppInt);发布于 2020-04-30 09:56:40
这是微不足道的,在一般情况下,我要解释一下:
对于一般的N位整数(其中N是一个大数),不太可能有任何定义良好的字节顺序,实际上,即使是64位和128位整数,也有超过2种可能的顺序在使用:https://en.wikipedia.org/wiki/Endianness#Middle-endian.
endian_reverse(static_cast<int64_t>(my_cpp_int))一样。同样,不要将结果重新赋值给cpp_int,因为它需要本机字节顺序。如果您希望检查一个值是否足够小到适合于上述方法的N位整数,您可以使用msb函数,它返回cpp_int中最重要位的索引,再加上一个以获得所使用的位数,然后过滤掉0大小写,代码如下:无符号bits_used = my_cpp_int.is_zero()?0: msb(my_cpp_int) + 1;
请注意,上面所有的代码都使用完全可移植的代码--不需要对底层实现进行黑客攻击。
https://stackoverflow.com/questions/61500948
复制相似问题