如果我在 32 位应用程序中将 int 写入 fstream 并在 64 位应用程序中读取该 int,我是否应该期望值不同?如果是这样(我猜是这样),实现独立于架构的流操作的最佳方法是什么?
问问题
341 次
2 回答
2
operator<<
如果您使用and读写operator>>
,它将与平台无关,假设整数足够小以适合两种类型,因为 if 将被写为文本。如果您使用ostream::read
and osteam::write
,它不会独立于平台,因为您将编写二进制数据。
如果您不需要原始性能,则使用文本格式是实现平台独立性的最简单方法。如果您需要更好的性能,您应该查看序列化库。Boost 有一个很好的跨平台。
于 2013-03-08T17:56:18.640 回答
2
好吧,这取决于您是编写二进制还是ASCII。如果你用 ASCII (UTF-8) 写你的数字,那么读取应该产生相同的结果。
我建议您使用该boost::serializaton
包以受控和统一的方式读取和写入数据。
但是,如果它在相反的方向工作是不确定的,即从 64 位到 32 位。这取决于您的编译器,如果它将int
s 编译为 64 位,那么您可能会将无法读取的值写入 32 位int
s。即使您写入格式化的流。
但是,int
在 C++ 中不能保证 a 的大小,只是它的大小大于或等于 a short
。这取决于编译器。
如果您想真正确定可以使用 GMP 处理大整数,请自动验证数据。
于 2013-03-08T18:04:11.903 回答