在C语言中,允许在结构体中以位为单位来指定成员所占内存长度,这样的成员叫位域(bit field)
如:
typedef struct IPPacket
{
u_int8_t headerlen:4,//低4位:头部长度
version :4; //高4位:IP版本;
u_int8_t tos;
u_int16_t totallen;
u_int16_t id;
u_int16_t offset; //高3位:标志;低13位:偏移
u_int8_t ttl;
u_int8_t protocol;
u_int16_t checksum;
struct in_addr srcip;
struct in_addr dstip;
}IP;
注意:
1.空间分配方向:一般是从右到左
如上例:将headerlen放在低4位(右),version放在高4位(左)
2.位域成员类型为int 或unsigned
3.一个位域只能存储在同个存储单元中,不能跨越两个单元
4.位域的长度不能大于存储单元的长度