最近,我正在跟蹤網絡通信雙方具有不同字節順序時出現的錯誤。一方已經發出標記lastSegment
的電報,而另一方仍在無休止地等待最後一段。Endianess in a byte
我讀到這段代碼:
#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
我知道字節序而言多字節類型,例如,整型,長等,但爲什麼它在前面的代碼在乎呢? lastSegment
和reserved
位於單個字節內。
這是一個錯誤嗎?
跨編譯器和體系結構的位打包佈局不可移植,並且是實現定義的。你不能認爲它會以同樣的方式完成。另請參閱:http://stackoverflow.com/questions/1490092/cc-force-bit-field-order-and-alignment – Joe