Istream和ostream跨平台

istream and ostream across platforms

本文关键字:跨平台 ostream Istream      更新时间:2023-10-16

假设我想在我的大端机器上写这个

an_ostream_impl my_output_on_BE;
my_output_on_BE << __int32(0x1234);

在我的小端机器上

an_istream_impl my_input_on_LE;  
__int32 value;
my_input_on_LE >> value;
assert( value == 0x1234 );

是否有istream/ostream实现允许这个?例如,总是流数字在大端(或任何格式)?

如果您需要在机器之间共享比单个整数更复杂的数据,我衷心推荐Google Protocol Buffers。您在文本文件中定义"消息",通过编译器(协议)运行它们,并获得您选择的语言的源代码。此源定义了与您的消息规范以及序列化和反序列化方法相对应的对象。

我不知道有任何实现能够做到这一点。自己编写类似这样的东西最简单的方法可能是使用Boost.Iostreams。您可以简单地实现适当转换的设备,然后使用stream创建一个流,该流委托给您编写的设备并公开标准iostream接口。

在这种情况下,唯一的方法可能是自己序列化/反序列化,即一个字节一个字节地读/写。