
hto来自ns是将整型360百科变量从主机字节顺序转变成网络字节顺序, 就是整数在地址空间存储方式变为高位兰自搞守现均层夫肉字节存放在内存的低地址处。
网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据父位如差别底标酒在不同主机之河间传输时能够被正确解释,网络字节顺序采用big-end律项激生ian排序方式。
- 外文名称 htons
- 应用 Windows和Linux网络编程
- 用途 将主机字节顺序转为网络字节顺序
- big-endian 地址的低位存储值的高位
概述
在Windows和Linux网络编程时需要用到的,用来将主机字节顺序转化为网络字节顺序,以Windows下的代码为来自例:
htons的功能:将一个无符号短整型的主机数值转换为网络字节顺序,即大尾顺序(big-endian)
参数u老究总联组贵混酸终_short hostsho360百科rt:16位无符号整数
返回值:TCP/IP网触将洲草垂乙航始参右络字节顺序.
不同的CPU有不同的字节顺序振聚度既老固供战观坐报类型,这些字节顺序类型指的是整浓协犯属皮脸精数在内存中保存的顺序,即主机字节顺序。常见的有两种:
序号 | 英文名 | 中文名 | 描述 |
1 | big-en政dian | 大尾顺序 | 地址的低位存储值的高位 |
2 | little-endian | 小尾顺序 | 地址的低位存储值的低位 |
示例
例1
而我们常用的 消镇析转几营变审x86 CPU (intel, AMD) 电脑是 little-endian,也就是整数的食聚留弱威样低位字节放在内存的低字节处。举个例子吧。假定你的数据是0x1234,
在网络字节顺序里 这个数据放到内存中就应该显示成
边 addr addr+1
史需特事0x12 0x34
而在x86电脑上,数据0x1234放到欢意增伯致卫承表树己内存中实际是:
addr addr+1
0x34 0x12
htons 的用处就是把实际主机内存中的整数存放方式调整成网络字节顺序。
例2 C++代码示例
运行的结果如图1
解释一下,数字16的16进制表示为0x0010,数字4096的16进制表示为0x1000。 由于Intel机器是小尾端,存储数字16时实际顺序为1000,存储4096时实际顺序为0010。因此在发送网络包时为了报文中数据为0010,需要经过htons进行字节转换。如果用IBM等大尾机器,则没有这种字行里原块迫节顺序转换,但为了程序的可移植性,也最好用这个函数。
其他信息
不同CPU上运行不同来自的操作系统,其主机字节360百科顺序也是不同,参见下表:
传光山拿省石井科演字米 处理器 | 操作系统 | 字节顺序 |
Alpha | 全部 | little消显玉父革丝-endian |
HP-PA | NT | little-endian |
HP-PA | U师约显信入消再乱NIX | big-endian |
Intelx86 | 全部 | li生告单清河盾结还粒告鱼ttle-endian |
MIPS | NT | little-endian |
MIPS | UNIX | b城九目继斤益渐沉ig-endian |
P期言owerPC | NT | little-endian |
PowerPC | 非NT | big-endian |
评论留言