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