如果我在32位应用程序中将一个int写入fstream,然后在64位应用程序中读取该int,那么我应该期望值不同吗?如果是的话(我认为是),那么实现与体系结构无关的流操作的最佳方法是什么?
operator<<
和 operator>>
进行读写操作,假设整数小到足以适应两种类型,那么它将是平台无关的,因为会被写成文本。如果您使用 ostream::read
和 osteam::write
,这将不是平台无关的,因为您将要写入二进制数据。这取决于您是使用二进制编写还是使用ASCII编码。如果您使用ASCII(UTF-8)编写数字,则读取应产生相同的结果。
我建议您使用boost::serialization
包以控制和统一的方式读写数据。
然而,反过来是否有效就不确定了,即从64位到32位。这取决于您的编译器,如果它将int
编译为64位,则您可能会写入无法读入32位int
的值,即使您写入格式化流中。
但是,在C ++中,int
的大小没有保障,只有比short
大或等于其大小。这取决于编译器。
如果您想确保,可以使用GMP处理大整数,然后自动验证数据。
fstream
是格式化的输入/输出,而不是二进制模式还是相反? - WhozCraig