typedef struct IpHeader
{
u_char Version_Hlen;//首部长度IP版本号,1字节
u_char TOS;//服务类型TOS
short Lengh;//总长度,2字节
short Iden;//标识
short Flags_Offset;//标志
u_char TTL;
u_char Protocl;//协议
short Checksum;//首部校验和
unsigned int SourceAddr;//源IP地址,4字节
unsigned int DestinationAddr;//目的IP地址;以上总和为20字节
}Ip_Header;
初始化Version_Hlen的时候,代码是:ipHeader.Version_HLen=(4<<4|sizeof(ipHeader)/sizeof(unsigned long));
先看"<<",它是C++中的左移运算符
4<<4也就是00000000.00000000.00000000.00000100想左移动4位,变为00000000.00000000.00000000.01000000(中间的点是为了方便阅读,无其他含义)
sizeof(ipHeader)为20,sizeof(unsigned long)为4
之后就是00000000.00000000.00000000.01000000|00000000.00000000.00000000.00000101
结果为00000000.00000000.00000000.01000101
后八位正好是ipHeader的前八位。
代表协议版本号是4,即IPV4,首部长度是5*4=20字节。