我有一个双打的二进制文件,我需要使用C++加载.但是,我的问题是它是用big-endian格式编写的,但是fstream >> operator会因为我的机器是little-endian而读错了.解决整数似乎是一个简单的问题,但对于双精度和浮点数,我找到的解决方案将无效.我怎么能(或应该)解决这个问题?
我把它读作整数字节交换的参考:
如何在C++中的big-endian和little-endian值之间进行转换?
编辑:虽然这些答案很有启发性,但我发现我的问题在于文件本身而不是二进制数据的格式.我相信我的字节交换确实有效,我只是得到了令人困惑的结果.谢谢你的帮助!
最便携的方法是以文本格式序列化,以便您不会出现字节顺序问题.这是operator>>有效的,所以你不应该有任何endian问题>>.二进制格式(可以解释字节序问题)的主要问题是浮点数由多个尾数位,多个指数位和一个符号位组成.指数可以使用偏移量.这意味着直接字节重新排序可能不够,具体取决于源和目标格式.
如果您在两台计算机上使用IEEE-754,那么您可以使用直接字节反转,因为此标准指定了应该是可移植的位串交换格式(除了字节顺序问题).
如果你必须在两个机器架构之间进行转换而你必须使用原始字节内存转储,那么只要基本数字格式相同(即它们在数字的每个部分中具有相同的位数),你就可以阅读将数据转换为数组unsigned char,使用一些基本的字节和位交换例程来纠正存储格式,然后将原始字节复制到适当类型的变量中.