htons函数:将主机的无符号短整形数转换成网络字节顺序。
来源:互联网 发布:配置数据库镜像 编辑:程序博客网 时间:2024/05/16 16:55
htons()
简述:
将主机的无符号短整形数转换成网络字节顺序。
#include <winsock.h> u_short PASCAL FAR htons( u_short hostshort);
hostshort:主机字节顺序表达的16位数。
注释:
本函数将一个16位数从主机字节顺序转换成网络字节顺序。
返回值:
htons()返回一个网络字节顺序的值。
参见:
htonl(), ntohl(), ntohs().
简单地说,htons()就是将一个数的高低位互换
(如:12 34 –> 34 12)
VB表示:
MsgBox Hex(htons(&H1234))
显示值为 3412
在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与HBO
网络字节顺序NBO(Network Byte Order):
按从高到低的顺序存储,在网络上使用统一的网络字节顺序,可以避免兼容性问题。
主机字节顺序(HBO,Host Byte Order):
不同的机器HBO不相同,与CPU设计有关,数据的顺序是由cpu决定的,而与操作系统无关。
如 Intelx86结构下,short型数0x1234表示为34 12, int型数0x12345678表示为78 56 34 12如IBM power PC结构下,short型数0x1234表示为12 34, int型数0x12345678表示为12 34 56 78
由于这个原因不同体系结构的机器之间无法通信,所以要转换成一种约定的数序,也就是网络字节顺序,其实就是如同powerpc那样的顺序 。在PC开发中有ntohl和htonl函数可以用来进行网络字节和主机字节的转换。
在Linux和Windows网络编程时需要用到htons和htonl函数,用来将主机字节顺序转换为网络字节顺序。
在Intel机器下,执行以下程序
int main()
{
printf(“%d \n”,htons(16));
return 0;
}
得到的结果是4096,初一看感觉很怪。
解释如下,数字16的16进制表示为0x0010,数字4096的16进制表示为0x1000。由于Intel机器是小尾端,存储数字16时实际顺序为1000,存储4096时实际顺序为0010。因此在发送网络包时为了报文中数据为0010,需要经过htons进行字节转换。如果用IBM等大尾端机器,则没有这种字节顺序转换,但为了程序的可移植性,也最好用这个函数。
另外用注意,数字所占位数小于或等于一个字节(8 bits)时,不要用htons转换。这是因为对于主机来说,大小尾端的最小单位为字节(byte)。
包含的头文件为:”winsock2.h”
- htons函数:将主机的无符号短整形数转换成网络字节顺序。
- 网络字节顺序和主机字节顺序的转换(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、ntohl、htons、ntohs
- 主机字节序与网络字节序的转换函数:htonl、ntohl、htons、ntohs
- 主机字节序与网络字节序的转换函数:htonl、ntohl、htons、ntohs
- 主机字节顺序与网络字节顺序相互转换的四个函数
- 网络字节顺序和主机字节顺序的转换
- 网络字节序与主机字节序的转换(htonl,htons,inet_addr,ntohl,ntohs,inet_ntoa)
- strtoul函数的使用(将字符串转换成无符号长整型数)
- 实例验证网络字节序、主机字节序转换函数 htonl htons ntohl ntohs的用法以及需要注意的问题
- Linux下网络IP地址的转换,主机字节顺序和网络字节顺序的转换。
- 网络IP地址转换、主机字节顺序、网络字节顺序的转换 -- linux
- Java中字节与无符号数之间的转换
- Using smart pointers for class members
- 困扰已久的运行时粒子缩放问题:Unity3D研究院之运行时修改粒子特效镜像以及缩放
- HTTP协议详解
- cms06---cms-usr01
- indexof()的使用方法
- htons函数:将主机的无符号短整形数转换成网络字节顺序。
- 动作标签与指令标签
- 做作业还是不要装逼。呜呜,知错了。谁能知道这个小小的问题浪费了我多少时间。一个上午的努力!!!
- 微信小程序学习笔记(一)
- max min
- 列表控件ListView与下拉列表Spinner
- inet_addr
- C语言入门细节整理
- Entropy