跨平台的istream和ostream

时间:2011-11-04 11:10:11

标签: c++ portability iostream endianness

假设我想在我的big-endian机器上写这个

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实现?例如。总是以Big Endian(或任何格式)流式传输数字?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

我不知道任何能够开箱即用的实现。自己编写类似内容的最简单方法可能是使用Boost.Iostreams。您可以简单地为适当的转换实现devices,然后使用stream创建委派给您编写的设备的流,并公开标准的iostream接口。

答案 2 :(得分:0)

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