迷你拼图IP头

时间:2013-11-27 01:37:19

标签: c ip c-preprocessor

请查看以下代码:

#define IP_HL(ip)       (((ip)->ip_vhl) & 0x0f)
#define IP_V(ip)        (((ip)->ip_vhl) >> 4)

这里的完整代码http://www.tcpdump.org/pcap.html

我理解ip_vhl中的8位:

  • IP_HL做&使用0000 1111进行操作,这意味着我们得到最后四位
  • IP_V将位模式向右移位4位,同样也给我们最后4位......

我检查了代码并且工作正常:它显示4个用于IP版本,5个用于标题大小...

它如何返回不同的数字? 我的理解有什么问题?

2 个答案:

答案 0 :(得分:1)

不,IP_V将位模式向右移位4位,这使得 first 4位(假设你正如你所知,它是8位值)。

更详细地说,假设位模式abcdefgh

  abcd efgh         abcd efgh
& 0000 1111              >> 4
  =========         =========
  0000 efgh         0000 abcd

>> 4操作会丢弃右侧出现的位,并在左侧输入0位。因此,一次重视一点点的正确的东西会给出:

abcd efgh     --> direction of shift
0abc defg
00ab cdef
000a bcde
0000 abcd

答案 1 :(得分:0)

如果你的位是0011 0101那么>>如果您将所有内容移动到正确的4个位置,并且丢失了0101位,则4将获得0000 0011。