C ++:32比64比特流操作

时间:2013-03-08 17:47:04

标签: c++ stream 64-bit

如果我在32位应用程序中将一个int写入fstream并且在64位应用程序中读取int,那么我应该期望该值是不同的吗?如果是这样(我认为是这样),实现独立于体系结构的流操作的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

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

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

但是,C ++中int的大小没有任何保证,只是大小或等于short。这取决于编译器。

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