ipHeader.Version_HLen=(4 << 4| sizeof(ipHeader) / sizeof(unsigned long))解析

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字节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值