【发布时间】:2012-12-03 12:20:24
【问题描述】:
最近我正在追踪一个当网络通信的两端具有不同的字节序时出现的错误。一方已经发了一个电报标记lastSegment,而另一方还在无休止地等待最后一段。
我读了这段代码:
#ifndef kBigEndian
struct tTelegram
{
u8 lastSegment : 1;
u8 reserved: 7;
u8 data[1];
};
#else
struct tTelegram
{
u8 reserved: 7;
u8 lastSegment : 1;
u8 data[1];
};
#endif
我知道字节序与多字节类型有关,例如 int、long 等。但是为什么它在前面的代码中关心呢? lastSegment 和 reserved 在单个字节内。
这是一个错误吗?
【问题讨论】:
-
跨编译器和架构的位打包布局不可移植,并且是实现定义的。你不能假设它会以同样的方式完成。另见:stackoverflow.com/questions/1490092/…
标签: c++ endianness