htonl(), ntohl(), htons(), ntohs() 函数具体应用
htons和htonl函数具体应用
htons和htonl函数,是用来将主机字节顺序转换为网络字节顺序
在进行网络抓包时,抓到的包的数据是网络字节顺序,在进行编程时,要进行主机字节顺序和网络字节顺序间的转换。
例如:
(对一软件进行抓包时,写的一段小程序)
ipp2p:
if(get_u16(payload,0)==__constant_htons(0x0600)
&& get_u32(payload,2)==(plen-6))
{
printk("identifing and datalen=%d /n",plen);
return(IPP2P_TEST*100+6);
}
网络字节是0x0600,而在主机内部所读的字节是0x06.
简单而言,htons()是将一个数的高低位进行互换:(如:06 00 --> 00 06)
注明:
get_u32(payload,0)==_htonl(0x06073200)
则主机内部字节为:0x320706
htonl 是针对32位,4个字节而言
htons 是针对16位,2个字节而言
另外需注意,数字所占位数小于或等于一个字节(8 bits)时,不要需转换。
htonl(), ntohl(), htons(), ntohs() 函数
在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题。这是就可能用到htons(), ntohl(), ntohs(),htons()这4个函数。
网络字节顺序与本地字节顺序之间的转换函数:
htonl()--"Host to Network Long"
ntohl()--"Network to Host Long"
htons()--"Host to Network Short"
ntohs()--"Network to Host Short"
之所以需要这些函数是因为计算机数据表示存在两种字节顺序:网络字节顺序NBO(Network Byte Order)与主机字节顺序HBO(Host Byte Order)
a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
c) 网络字节序:TCP/IP各层协议将字节序定义为Big-Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序。
网络字节顺序NBO: 按从高到低的顺序存储,在网络上使用统一的网络字节顺序,可以避免兼容性问题。
主机字节顺序HBO: 不同的机器HBO不相同,与CPU设计有关,数据的顺序是由cpu决定的,而与操作系统无关。(大端和小端模式与cpu设计有关而和操作系统无关)
如 Intel x86结构下, short型数0x1234表示为34 12, int型数0x12345678表示为78 56 34 12
如 IBM power PC结构下, short型数0x1234表示为12 34, int型数0x12345678表示为12 34 56 78
由于这个原因不同体系结构的机器之间无法通信,所以要转换成一种约定的数序,也就是网络字节顺序,其实就是如同power pc那样的顺序. 在PC开发中有ntohl和htonl函数可以用来进行网络字节和主机字节的转换.
htonl(), ntohl(), htons(), ntohs() 函数具体应用相关推荐
- htonl(), ntohl(), htons(), ntohs() 函数
转自:http://www.cnblogs.com/s7vens/archive/2011/12/12/2284892.html 在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题 ...
- htonl ntohl htons ntohs
在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题. 这时就可能用到htons(), ntohl(), ntohs(),htons()这4个网络字节顺序与本地字节顺序之间的转换函数 ...
- 【PackUnPack】htonl、htons、ntohl、ntohs函数实现
网络字节序是大端 参考: htonl.htons.ntohl.ntohs函数实现 判断是大端还是小端 小端时,(ENDIANNESS=='l') static union { char c[4]; u ...
- 模拟htonl、ntohl、htons、ntohs函数实现
模拟htonl.ntohl.htons.ntohs函数实现 2010-04-14 17:25:06| 分类: 网络编程 | 标签: |字号大中小 订阅 From: http://wxxweb.bl ...
- Linux网络通信----htonl()、htons()、ntohl()、ntohs()四个函数
转载:https://blog.csdn.net/miao19920101/article/details/69398158 前言: 今天在工作中用到htonl()这个函数,不是很理解,查阅资料之后随 ...
- htonl、ntohl、htons、ntohs函数实现
转载:https://blog.csdn.net/lizhi200404520/article/details/7290193 因为,有符号数右移会发送补符号位1的情况,所以,以下会对原数强制类型转换 ...
- htons、htonl、ntohl、ntohs的区别与使用
文章目录 1.网络编程字节转换 2. 主机字节顺序<-->网络字节顺序 3.大小端模式 1.网络编程字节转换 s表示短.l表示长: ntohs =net to host short int ...
- 网络字节顺序和主机字节顺序的转换(htons ntohs htonl ntohl)
from https://blog.csdn.net/baidu_33621692/article/details/53213002 网络字节顺序和主机字节顺序的转换(htons ntohs hto ...
- ntohs, ntohl, htons,htonl
ntohs, ntohl, htons,htonl的比较和详解 在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题. 这时就可能用到htons(), ntohl(), ntohs( ...
最新文章
- 跟我学Spring Cloud(Finchley版)-16-Zuul
- linux下卸载mysql(rpm)
- c语言中Gretchen函数的功能,听过很多的歌的音乐达人给我推荐一下
- Opencv--线性及双线性插值算法
- 命令行开启一个unity实例和执行其中的脚本方法的使用和注意
- 2012r2配置java_JDK+Tomcat 服务器配置+腾讯云Win2012 R2 配置安装
- socket是什么?
- js中WINDOW对象中的navigator成员对象
- image.open()得到的图片是什么类型_复古门窗花格图片大全让精彩生活继续闪耀 「巴森」...
- 移动开发的设计稿为什么大多数是750px?
- 推荐6本Java书籍,助你在Java路上更精进!
- Spotfire 使用IronPython脚本
- 【python中级】 ico图标生成器
- java研发微博营销
- 网站不收录怎么办?网站SEO优化工具
- 坚果云企业版服务器端,坚果云团队版和企业版的区别
- 生成CA根证书、公钥、私钥指令(数字证书)
- ZOJ 3736 模拟魔方
- 安全尽职是企业的阿克琉斯之踵
- 邮件服务器 POP3协议 详解