C++:32位与64位流操作



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

如果使用operator<<operator>>进行读写,则它将是独立于平台的,假设整数足够小,可以同时适用于这两种类型,因为If将被写成文本。如果您使用ostream::readosteam::write,它将不是独立于平台的,因为您将编写二进制数据。

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

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

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

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

然而,并不能保证C++中int的大小,只是它在大小上大于或等于short。这取决于编译器。

如果你想真正确定你可以使用GMP来处理大整数,那么自动验证数据。

相关内容

  • 没有找到相关文章

最新更新