免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3120 | 回复: 10
打印 上一主题 下一主题

还有一个字节序与指针的问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-06 12:00 |只看该作者 |倒序浏览
本帖最后由 程序c 于 2010-11-06 16:14 编辑

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转换下,这默认就正过来了,我有点晕

---2011.11.6 16:12
我的意思是为什么在第二段程序,没经过转换字节序自动就变成小端了
而在第一段程序需要经过转换才能变成小端
是因为用了指针的关系么?我没看出来这个指针可以改变字节顺序啊

论坛徽章:
0
2 [报告]
发表于 2010-11-06 14:00 |只看该作者
基本东西,不要多说,自己看书去吧。

论坛徽章:
0
3 [报告]
发表于 2010-11-06 14:59 |只看该作者
基本东西,不要多说,自己看书去吧。
pagx 发表于 2010-11-06 14:00


看哪本书,能推荐下不?

论坛徽章:
0
4 [报告]
发表于 2010-11-06 15:59 |只看该作者

论坛徽章:
0
5 [报告]
发表于 2010-11-06 16:08 |只看该作者
麻烦请仔细看看我的帖子,要是能查简单的书就查到,或者直接GOOGLE到我肯定不会在这问的。

我这个是一个奇怪的问题。
我知道我很不聪明,可是这个指针为什么会改变字节序的问题我真是想不通。

谁要能解释就解释一下,助人为乐吧。

论坛徽章:
224
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:1015-16赛季CBA联赛之四川
日期:2023-07-25 16:53:45操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
6 [报告]
发表于 2010-11-06 16:22 |只看该作者
wiki

论坛徽章:
0
7 [报告]
发表于 2010-11-06 16:35 |只看该作者
这么多高手都让我查,不可能每个高手都没认真看帖子,算了,那我还是再查查吧。

论坛徽章:
0
8 [报告]
发表于 2010-11-06 17:50 |只看该作者
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的

    答题完毕

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
9 [报告]
发表于 2010-11-06 18:15 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2010-11-06 20:38 |只看该作者
我来做练习题的,请老师们批改。

    网络字节序是BE的,也可以理解为,从左到右的书写习惯时 ...
xyfree 发表于 2010-11-06 17:50


看了您的帖子,我终于明白了。请允许我说谢谢,耽误您时间了。
不过我真的看了很长时间,查了很长时间,我知道我的问题所在了,没有认清内存和人脑的想象的误区。
我查了又查,都没明白,经您点拨,我真的楼暗花明。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP