在网络传输过程中,一定会涉及到主机序和网络序的问题,即本机的存储和网络的传输是完全两套存储方式,我们保证不了目标主机的字节序是否和网络序一致,因此一定要考虑这个问题,这里介绍常用的两个函数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);
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程