如何处理网络字节序之htonl和ntohl
来源:互联网 发布:淘宝上新提醒在哪里 编辑:程序博客网 时间:2024/05/21 11:06
htonl
ntohl
其实,这两个函数的内部实现是一样的,它首先判断机器是否是大字节序,如果是,则什么都不做,否则就转换一下。(说白了,其实只需要一个函数都是一样的,这样做只不过代码看起来更好理解,即没次发送我都转换成网络序,每次接收到后都转换成主机序)
因为网络字节序约定是大字节序的,也就是说,我们发出的和收到的都应该是大字节序处理后。
只要是发送,我们就调用htonl将主机序转换成网络字节序,只要是收到的,我们就调用ntohl将其网络序转换成主机序(不管在什么平台,只要按这个规则来就不会错,主要记住这个OK)。
因为htonl和ntohl在内部进行了字节序判断的,比如你的主机序是大字节序,即已经和网络序是相同的了,当然htonl和ntohl就什么都不做了。
原来理解出错的主要原因是:以为被转换的数值参数中包含了字节序信息,比如对一个数值连续调用两次htonl函数,第二次就应该什么都不做,因为前面一次调用已经将其转换成网络序了。哈哈,这个理解真可笑,傻瓜都知道,从一个数值怎么可能判断的出是什么字节序!显然不行嘛,人都不能判断出来,电脑更不能判断出来,所以只要你的机器不是大字节序的,何时调用htonl,ntohl都会有反应。(定式思维害人啊!!!!)
思维扩展:
如果要想让前面的错误理解变得正确,那么就得将数值和其字节序信息包装起来,哈哈!
如何记住什么是大字节序?
直观的就是大的,呵呵!
0x01020304这个值在内存中就是 01 02 03 04(左对左,右对右,直观)
ntohl
其实,这两个函数的内部实现是一样的,它首先判断机器是否是大字节序,如果是,则什么都不做,否则就转换一下。(说白了,其实只需要一个函数都是一样的,这样做只不过代码看起来更好理解,即没次发送我都转换成网络序,每次接收到后都转换成主机序)
因为网络字节序约定是大字节序的,也就是说,我们发出的和收到的都应该是大字节序处理后。
只要是发送,我们就调用htonl将主机序转换成网络字节序,只要是收到的,我们就调用ntohl将其网络序转换成主机序(不管在什么平台,只要按这个规则来就不会错,主要记住这个OK)。
因为htonl和ntohl在内部进行了字节序判断的,比如你的主机序是大字节序,即已经和网络序是相同的了,当然htonl和ntohl就什么都不做了。
原来理解出错的主要原因是:以为被转换的数值参数中包含了字节序信息,比如对一个数值连续调用两次htonl函数,第二次就应该什么都不做,因为前面一次调用已经将其转换成网络序了。哈哈,这个理解真可笑,傻瓜都知道,从一个数值怎么可能判断的出是什么字节序!显然不行嘛,人都不能判断出来,电脑更不能判断出来,所以只要你的机器不是大字节序的,何时调用htonl,ntohl都会有反应。(定式思维害人啊!!!!)
思维扩展:
如果要想让前面的错误理解变得正确,那么就得将数值和其字节序信息包装起来,哈哈!
如何记住什么是大字节序?
直观的就是大的,呵呵!
0x01020304这个值在内存中就是 01 02 03 04(左对左,右对右,直观)
- 如何处理网络字节序之htonl和ntohl
- 网络字节顺序和主机字节顺序的转换(htons ntohs htonl ntohl)
- 网络字节顺序和主机字节顺序的转换(htons ntohs htonl ntohl)
- 网络字节顺序和主机字节顺序的转换(htons ntohs htonl ntohl)
- 网络字节顺序和主机字节顺序的转换(htons ntohs htonl ntohl)
- 网络字节顺序和主机字节顺序的转换(htons ntohs htonl ntohl)
- 网络字节顺序和主机字节顺序的转换(htons ntohs htonl ntohl)
- 网络字节序与主机字节序的转换(htonl,htons,inet_addr,ntohl,ntohs,inet_ntoa)
- 主机字节序与网络字节序的转换函数:htonl、ntohl、htons、ntohs
- 主机字节序与网络字节序的转换:ntohl()与htonl()
- 主机字节序与网络字节序的转换函数:htonl、ntohl、htons、ntohs
- 主机字节序与网络字节序的转换函数:htonl、ntohl、htons、ntohs
- 网络字节转换函数htons htonl ntohs ntohl
- 网络字节转换函数 htons(), htonl(), ntohs(), ntohl()
- 高低字节序转换(htonl、ntohl、htons、ntohs函数)
- 字节序大小端转换、模拟htons、htonl、ntohs、ntohl
- 实例验证网络字节序、主机字节序转换函数 htonl htons ntohl ntohs的用法以及需要注意的问题
- 网络编程:htons、htonl、ntohs、ntohl简析
- C++ Deque(双向队列)
- Android应用设置为全屏的方法
- POJ 1328 Radar Installation
- 毕业设计(十二)---后台用户管理(2)之- 分页 实现上一页,下一页,跳页功能
- 用Ras的API函数创建一个拨号连接
- 如何处理网络字节序之htonl和ntohl
- hibernate一对一单向外键关联_Annotation_联合主键
- iptables 基本命令
- linux 如何显示一个文件的某几行(中间几行)
- 如何抓DHCP包
- thift源码研究-客户端代码分析
- Linux 之Cut命令详解
- 【遇到SARS不要慌,让我们找到谁是可疑感染者!!】 并查集--poj1611
- Linux防火墙 配置文件 iptables详解