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