【发布时间】:2011-11-04 11:10:10
【问题描述】:
假设我想在我的大端机器上写这个
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(或任何格式)流式传输数字?
【问题讨论】:
-
我假设您使用的是二进制模式的流?
-
@BjörnPollex:是的,它们将由知道内部使用什么字节顺序的人正确初始化。我希望有像
cout.setflags(std::big_endian)这样简单的东西。 -
所有实现都应该支持这一点,因为
operator<<的默认实现输出值的文本表示,operator>>解析值的文本表示。流是否处于二进制模式无关紧要,非二进制模式只影响'\n'。 -
@dalle:确实——你是对的。我不应该在流插入方面编写接收器部分。这是我试图代表的一种网络协议,而接收者不在我的控制范围内。
标签: c++ portability iostream endianness