【发布时间】:2014-01-10 13:56:56
【问题描述】:
对于二进制文件的可移植性,我对二进制 I/O 有疑问。 假设运行我的软件的 PC 使用 8 个字节来存储双变量。 生成的二进制文件将有 8 个字节用于双变量。 现在说文件在使用 6 个字节作为双变量的 PC 中打开(只是假设)。 然后应用程序将只从文件中读取 6 个字节并将其存储在内存中的 double 变量中。 这不仅会导致数据下溢/上溢,而且由于读取不足会产生 2 字节偏移,因此在 double 之后读取的数据肯定会不正确。 我想支持我的应用程序不仅支持 32/64 位,还支持 Windows、Ubuntu PC。 那么如何确保在任何一台 PC 上从同一个文件中读取的数据都是一样的呢?
【问题讨论】:
-
还有更多的不兼容性,例如字节序!最好是使用文本或其他标准格式。
-
看序列化/反序列化。
-
数据太大,无法使用文本文件,通常以千兆字节为单位。阅读在文本中写入这么多双变量需要花费大量时间。因此转向二进制文件。
-
双精度数是IEEE standard,因此保证它们始终为 64 位。大小在这里不是问题,只是字节序(不太可能遇到的问题)。
-
@Cool_Coder 只有少数类型具有固定大小,可能是因为它们并非源自 C。正如您所见,整数类型和大多数基本类型都有指定的范围进入。然而,浮点数和双精度数是 IEEE 标准,并且具有非常特定的布局和大小,它们永远不应该改变(特别是因为处理器现在通常有它们的寄存器,这遵循标准)。它们是一个例外,但在这种情况下可能对您有用。