struct ip {
#if BYTE_ORDER == LITTLE_ENDIAN
u_char ip_hl:4,
ip_v:4;
#endif
#if BYTE_ORDER == BIG_ENDIAN
u_char ip_v:4,
ip_hl:4;
#endif
......
};
为什么它会更改ip_hl
和ip_v
的字节偏移量?我认为big endian和little endian用于描述单词中字节的位移。
答案 0 :(得分:0)
为了对术语迂腐,重要的是要意识到位域的偏移并没有真正改变 - 而是改变了位域的顺序。如果存在三个大小相等的位域,则不会看到中间位置的偏移量有任何差异,并且意图是颠倒其分配顺序的事实将更加明显。
是的,“endian”通常描述一个字的字节顺序,但是对于所有4.4BSD系统,位域的分配顺序也遵循该系统CPU架构的字的字节顺序。
(我认为对于所有UNIX System V ABI来说实际上也可能如此 - 它已经出现在我所知道的所有内容中。有非unix系统,但不遵循这个经验法则!)