读书人

关于IP包头的极度困惑

发布时间: 2013-09-06 10:17:17 作者: rapoo

关于IP包头的极度困惑,在线等。。。。
IP数据包头开始第一个byte分别为bit0 - bit3为4位版本号,bit4 - bit7为4位首部长度,一般情况都是版本好为4,首部长度为5,按照我的理解打印出来应该是0x54,但是抓包打印出来是0x45,而本人自己打印出来也是0x45,所以本人非常疑惑,也查了很多资料,其中涉及的问题就是大小端的问题,但是按照本人的理解大小端对于单个字节是没有影响的
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放在低四位,但是为什么直接在内存里打印出来却是0x45呢,求救,在线等.................................

[解决办法]

引用:
Plain Text code?1234567891011 0 1 2 3 4 5 6 7 bit +-+-+-+-+-+-+-+-+
[解决办法]
1
[解决办法]
0
[解决办法]
1
[解决办法]
0
[解决办法]
0
[解决办法]
0
[解决办法]
1
[解决办法]
0
------解决方案--------------------


+-+-+-+-+-+-+-+-+ 7 6 5 4 3 2 1 0……


从头到尾都是0x45 ,注意左右0~7的顺序
这里的0~7是什么顺序?0是对应字节的最高位第7位,而7对应最低位吗

读书人网 >UNIXLINUX

热点推荐