0

目前,在 32 位机器上,我将二进制数据写入文件,如下所示:

outbin.write( reinterpret_cast <const char *> ( &key_session ), sizeof( unsigned int ) );
outbin.write( reinterpret_cast <const char *> ( &last_access_time ), sizeof( time_t ) );
outbin.write( reinterpret_cast <const char *> ( &sizet ), sizeof( size_t ) );
outbin.write( reinterpret_cast <const char *> ( &ddd), sizeof( double ) );
outbin.write( reinterpret_cast <const char *> ( &fff), sizeof( float ) );

如何写入数据以使其可移植并确保数据将在任何机器(64 位)上加载?(可能会在机器上将操作系统更改为 64 位或将数据复制到其他机器时)

4

1 回答 1

4

在 C++0x 中,使用类似std::uint32_tfrom 的类型<cstdint>。在较旧的编译器中,使用 C99 头文件<stdint.h>;这在 MSVC 中是缺失的,但它的各种实现在网络上流传。您必须在写入时将所有变量intsize_t变量转换为<cstdint>类型,并在读取时将其转换回本机类型。

float并且double没有可移植的、已知宽度的版本,因此您可能不得不假设它们匹配来自 IEEE 754 的单双格式。一些断言在这里可能会有所帮助。

至于time_t,请注意它没有跨平台的标准化含义,只是它可以以某种未指定的方式表示时间。

(另外,请记住,您可能希望以字节序中性格式写出数据。)

于 2012-06-02T10:55:37.160 回答