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

Ann*_*inn 1 c++ floating-point caching endianness

我有一个存储在文件中的大型浮点数列表,格式如下

0.0010245  0.4624603  1.326266  -5.203623
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Jar*_*koL 8

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

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