首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将boost::multiprecision::cpp_int从大端改为小端

如何将boost::multiprecision::cpp_int从大端改为小端
EN

Stack Overflow用户
提问于 2020-04-29 11:39:43
回答 1查看 235关注 0票数 2

我在大端有一个boost::multiprecision::cpp_int,必须将它改为小endian。我怎么能这么做?我尝试过boost::endian::转换,但这没有起作用。

代码语言:javascript
复制
boost::multiprecision::cpp_int bigEndianInt("0xe35fa931a0000*);
boost::multiprecision::cpp_int littleEndianInt;

littleEndianIn = boost::endian::endian_reverse(m_cppInt);
EN

回答 1

Stack Overflow用户

发布于 2020-04-30 09:56:40

这是微不足道的,在一般情况下,我要解释一下:

对于一般的N位整数(其中N是一个大数),不太可能有任何定义良好的字节顺序,实际上,即使是64位和128位整数,也有超过2种可能的顺序在使用:https://en.wikipedia.org/wiki/Endianness#Middle-endian.

  • ,如果您知道该值足够小,可以容纳为本机整数类型,那么您可以简单地转换为本机整数并对结果使用system。就像在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;

请注意,上面所有的代码都使用完全可移植的代码--不需要对底层实现进行黑客攻击。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61500948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档