3

如果我在 32 位应用程序中将 int 写入 fstream 并在 64 位应用程序中读取该 int,我是否应该期望值不同?如果是这样(我猜是这样),实现独立于架构的流操作的最佳方法是什么?

4

2 回答 2

2

operator<<如果您使用and读写operator>>,它将与平台无关,假设整数足够小以适合两种类型,因为 if 将被写为文本。如果您使用ostream::readand osteam::write,它不会独立于平台,因为您将编写二进制数据。

如果您不需要原始性能,则使用文本格式是实现平台独立性的最简单方法。如果您需要更好的性能,您应该查看序列化库。Boost 有一个很好的跨平台。

于 2013-03-08T17:56:18.640 回答
2

好吧,这取决于您是编写二进制还是ASCII。如果你用 ASCII (UTF-8) 写你的数字,那么读取应该产生相同的结果。

我建议您使用该boost::serializaton包以受控和统一的方式读取和写入数据。

但是,如果它在相反的方向工作是不确定的,即从 64 位到 32 位。这取决于您的编译器,如果它将ints 编译为 64 位,那么您可能会将无法读取的值写入 32 位ints。即使您写入格式化的流。

但是,int在 C++ 中不能保证 a 的大小,只是它的大小大于或等于 a short。这取决于编译器。

如果您想真正确定可以使用 GMP 处理大整数,请自动验证数据。

于 2013-03-08T18:04:11.903 回答