如何在C++中的big-endian和little-endian值之间进行转换?
编辑:为清楚起见,我必须将二进制数据(双精度浮点值和32位和64位整数)从一个CPU架构转换为另一个CPU架构.这不涉及网络,因此ntoh()和类似的功能在这里不起作用.
编辑#2:我接受的答案直接适用于我正在编制的编译器(这就是我选择它的原因).但是,这里有其他非常好的,更便携的答案.
手册页htonl()似乎暗示您只能将其用于最多32位值.(实际上,ntohl()定义为无符号长整数,在我的平台上是32位.我想如果无符号长整数是8个字节,它将适用于64位整数).
我的问题是我需要将64位整数(在我的例子中,这是一个无符号长long)从big endian转换为little endian.现在,我需要进行特定的转换.但ntohl()如果目标平台WAS大端,如果函数(如)不会转换我的64位值,它会更好.(我宁愿避免添加我自己的预处理器魔法来做到这一点).
我可以用什么?如果它存在,我想要标准的东西,但我愿意接受实施建议.我在过去使用过工会看过这种类型的转换.我想我可以拥有一个带有unsigned long long和char [8]的联合.然后相应地交换字节.(显然会在大端的平台上破解).