c++ - 如何以可移植的方式将整数转换为小端

标签 c++ portability endianness

我想知道以可移植的方式将整数与小尾数转换的推荐方法是什么。

有相关的库吗?

我们可以使用htonl and ntohl然后再进行一次大端到小端的转换,但效率不高。

最佳答案

可移植的方法是使用位移位和掩码形成适当大小的字符串。请注意,我说的是字符串,因为这实际上是您唯一需要关心字节顺序的时间——在系统之间传输字节时。

如果您想避免不必要的转换(例如,在小端架构上转换为小端),则没有完全可移植的方法可以在编译时执行此操作。但您可以在运行时检查以动态选择转换函数集。

这确实有一个缺点,即代码无法内联。以可移植的方式编写转换并使用模板或内联可能会更有效。与半可移植的编译时检查相结合,这几乎是您所能得到的最好的结果。

进一步阅读:Detecting Endianness在编译时。

关于c++ - 如何以可移植的方式将整数转换为小端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36635653/

相关文章:

c++ - 独立环境中的程序

c++ - 是否存在 difftime 计算闰秒的实际系统?

hardware - RAID 1是否可以在不同的RAID Controller 之间移植?

c++ - batchedgemm源代码?

c++ - cpp.react 库的 C++ 源代码中出现奇怪的 "->* []"表达式

c++ - 移动MFC项目对话框的方法

c++ - 编译时检查右移是否是有符号类型的算术

arrays - 有没有办法使用动态大小来copy_from_slice?

java - 在 Java 中将十六进制文件转换为 unsigned int 32 Big-Endian

javascript - 字节序安全复制二进制数据