在C/C++写网络编程的时候,需要使用到网络字节序与主机字节序之间转换的函数,所以我就来总结一下。
另外写项目的时候,在这快的只是很混很混,最终导致程序崩溃,所以来总结一下常用的网络字节序的转换的接口
网络字节序:不同的CPU,在向内存中保存数据的方式也可能不一样,分为两种:大端序和小端序。大端序是指高地址先存,而小端序是指低地址先存。若服务端与客户端的CPU标准不同,那么传递的数据也就不一致了。所以为了解决这个问题,就约定了一个统一的方式:统一为大端序,这种约定我们成为网络字节序。所以要先把数据转换为大端序格式再进行传输
如: 0x12345678
大端序下的传输顺序
0x12345678
小端序下得传输顺序
0x78564512
所以就出现了字节序的转换接口
unsigned short ntohs(unsigned short); 将16位的网络字节序转换为主机字节序
unsigned long ntohl(unsigned long); 将32位的网络字节序转换为主机字节序
unsigned short htons(unsigned short ); 将16位的主机字节序转换为网络字节序
unsigned long htonl (unsigned long); 将32位的主机字节序转换为网络字节序
字节序转换接口
h代表的是主机字节序(小端字节序)类型,n代表的是网络字节序(大端字节序) ,s代表short类型,l代表long类型(4字节)。
ntohs: “Network to Host Short”
ntohl: “