Dotcpp  >  编程教程  >  TCP协议客户端及代码实现  >  htos和htol函数:主机序转换到网络序

htos和htol函数:主机序转换到网络序

点击打开在线编译器,边学边练

在网络传输过程中,一定会涉及到主机序和网络序的问题,即本机的存储和网络的传输是完全两套存储方式,我们保证不了目标主机的字节序是否和网络序一致,因此一定要考虑这个问题,这里介绍常用的两个函数htos和htol函数,使主机序转换到网络序


1.htos函数:

函数功能:

将主机无符号短整形数转换成网络,比如古人读12345的顺序是从右往左54321,而现代人读12345的顺序是从左往右读12345,htos函数就是完成类似的转换功能,举例说明如果把htons(16)输出你会看到得到的结果是4096,为什么呢?因为16的十六进制是0X0010,而4096的十六进制是0X1000。不同的存储方式,会导致高低位存储时顺序的不同,这就是即00 10和10 00 的存储不同的原因。


头文件:

#include <winsock2.h>

函数原型:

uint16_t htons(uint16_t hostlong);

返回值类型:

整型

返回值:

返回一个网络字节顺序的值

参数说明:

其中hostlong是主机字节顺序表达的16位数,htons中的h表示host意思是主机地址,to表示to意思是去往,转换为的意思,n表示net意思是网络,s表示signed long意思是无符号的短整型。

调用htos函数代码举例;

htos(5200);


2.htol函数

函数功能:

将一个32位数从主机字节顺序转换成网络字节顺序。

头文件:

#include <winsock2.h>

函数原型:

uint16_t htons(uint32_t hostlong);

返回值类型:

整型

返回值:

返回一个网络字节顺序的值

参数说明:

其中hostlong是主机字节顺序表达的32位数,htons中的h表示host意思是主机地址,to表示to意思是去往,转换为的意思,n表示net意思是网络,l 是 unsigned long表示32位长整数

调用htol函数代码举例;

htol( 0x403214);



本文固定URL:https://www.dotcpp.com/course/808

Dotcpp在线编译      (登录可减少运行等待时间)