- 论坛徽章:
- 0
|
struct iphdr *iph= pksb-> network_header
printfk(KERN_INFO"ipadd=(%x)',iph->saddr);
这里显示
ipadd=(3200a8c0)h 就是 50.0.168.192
代表iph->saddr 是一个网络字节序的IP地址
但是我转换成十进制的用下面的语句
struct iphdr *iph= pksb-> network_header;
unsigned char src_ip[4];
*(unsigned int *)src_ip=iph->saddr;
printk(KERN_INFO"%d.%d.%d.%d",src_ip[0],src_ip[1],src_ip[2],src_ip[3]);
竟然显示 192.168.0.50
字节序莫名其妙就正过来了。
这是什么道理,我真是百思不得其解。 要是显示50.0.168.192我就用ntohl转换下,这默认就正过来了,我有点晕
程序c 发表于 2010-11-06 12:00 ![]()
我来做练习题的,请老师们批改。
网络字节序是BE的,也可以理解为,从左到右的书写习惯时,最左边的最先发送。
又因为发送时是从偏移量小的一端到大的一端,也就是低地址的数据先发送
所以192.168.0.50 的网络字节序存储方式是(左边低地址,右边高地址)
C0, A8, 00, 32
有因为打印出来的结果是 3200A8C0, 第一个字节的数据是最高地址的数据,就是LE
可以断定LZ的机器是LE的
答题完毕 |
|