为什么struct ip被定义为
#if __BYTE_ORDER == __LITTLE_ENDIAN
unsigned int ip_hl:4; /* header length */
unsigned int ip_v:4; /* version */
#endif
#if __BYTE_ORDER == __BIG_ENDIAN
unsigned int ip_v:4; /* version */
unsigned int ip_hl:4; /* header length */
#endif
小端和大端仅影响多字节值。为什么我们在ip_hl
之前存储ip_v
,ip_hl
之后不应该ip_v
传输?
答案 0 :(得分:1)
Endianess还影响编译器在结果结构的字节内放置位字段字段的方式(结尾处的“:4”表示它的值仅为4位)。对于大端,这些位从最重要的位置填充。对于little-endian,这些位从最不重要的位置填充。