用视频做影视的网站,seo数据优化,查找网站域名,网站默认首页怎么设置网络通信是按照字节流进行数据交换的#xff0c;主机根据不同的CPU型号可能是大段存储#xff0c;也可能是小端存储。而网络字节序在TCP/IP协议中已经规定好了#xff0c;采用大端的排序方式。 所以网络通信中一般将需要传输的整数型值转换成网络字节序。 从本机字节序转换成…网络通信是按照字节流进行数据交换的主机根据不同的CPU型号可能是大段存储也可能是小端存储。而网络字节序在TCP/IP协议中已经规定好了采用大端的排序方式。 所以网络通信中一般将需要传输的整数型值转换成网络字节序。 从本机字节序转换成网络字节序:host to net short/long
#include arpa/inet.h
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);从网络字节序转换成本机字节序
#include arpa/inet.h
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netlshort);转换的原理其实也很简单就是判断一下本地是大端还是小端是大端就转换一下序列否则啥都不干。 下面介绍两种用来判断大小端的方法
第一种使用union
大端是指低字节存储在高地址小端存储是指低字节存储在低地址。我们可以根据联合体来判断该系统是大端还是小端。因为联合体变量总是从低地址存储。
bool isNetByteOrder()
{union test {int i;char c;};test t;t.i 1;// 如果是大端则 t.c 为0x00则 t.c 1 返回true// 否则返回falsereturn (t.c ! 1);
}第二种使用char指针
随意找一个2字节的十六进制数值如0x1234 如果本地是小端编码那么12存在高地址34存在低地址。那么强行把0x1234转换成1字节的char时高字节会被丢弃留下低字节值34。 如果本地是大端编码那么高地址字节种存储的是3412存在低地址强制转换成1字节的char时高字节会被丢弃留下低字节值12。
bool isNetByteOrder()
{unsigned short mode 0x1234;char* pmode (char*) mode;// 如果将低字节放在低位则是小端字节序return (*pmode ! 0x34);
}实现htons函数
uint16_t htons(uint16_t hostshort)
{if (isNetByteOrder())return hostshort;else return ((uint16_t)(hostshort 8)) | ((uint16_t)((hostshort 0x00ff) 8));
}