在网络传输过程中,一定会涉及到主机序和网络序的问题,即本机的存储和网络的传输是完全两套存储方式,我们保证不了目标主机的字节序是否和网络序一致,因此一定要考虑这个问题,这里介绍常用的两个函数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);


点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

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