确保二进制文件中的浮点数在不同平台上按预期表示?

时间:2014-06-21 15:55:49

标签: c++ caching floating-point endianness

我有一个很大的浮点数列表,以下列格式存储在文件中作为文本

0.0010245  0.4624603  1.326266  -5.203623

这些数字以纯文本形式写出,然后在读入程序时解析为实际的浮点数。

我想要做的是缓存4个字节的浮点表示,将其存储为单独的二进制文件,然后在程序的后续运行中使用它而不是原始纯文本。但是,我需要确保平台的字节顺序和格式在运行之间没有变化(如果用户升级,移动文件或只是更改计算机)。

所以我有一个测试浮点写入缓存文件的标题。它存储了-50.50505050的4字节二进制表示(只是一个随机幻数)。如果文件中的表示值匹配(在一个小错误中)程序应该是什么,它将使用缓存的文件。如果不是,它将使用原始文件并重新生成另一个缓存文件。

我的问题是,这个测试是否足以确保缓存文件的格式和字节顺序始终正确?

2 个答案:

答案 0 :(得分:8)

您可以为文件定义标准。即说它总是小端和32位IEEE浮点数。如果目标平台的本机表示与此不同,则在读取文件时执行转换为本机格式。

请注意,只有在计算机之间共享文件(或者像您提到的升级)时才会出现问题。如果您始终使用相同的配置运行它,则无需担心转换,只需存储本机格式。

答案 1 :(得分:2)

您的解决方案似乎合理。通过将在一个平台上生成的这样一个文件移动到另一个平台上,我无法想到你会得到误报的一对平台。

但是,我会避免“在一个小错误中”。检查您是否完全您期望的数字。这意味着您应该检查==。没有算术运算,因此您将获得序列化的数字,除非发生奇怪的事情,在这种情况下您想要进行故障转移。