主机字节序和网络字节序的转换

网络字节序:是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能被正确解释。网络字节序采用大端字节排序方式。
主机字节序:不同的机器主机字节序可能不同,与CPU设计有关,数据的顺序是由CPU决定的,而与操作系统无关。

判断本机的主机字节序:

 int dGetHostByteOrder()

{

uint32_t a = 0x12345678;

uint8_t *p = (uint8_t *)(&a);

if(*p==0x78) { return 0 }

else { return 1;

}

}

四个C标准库函数进行字节序间的转换。

#include <arpa/inet.h>

uint32_t htonl(uint32_t hostlong);    
uint16_t htons(uint16_t hostshort);     
uint32_t ntohl(uint32_t netlong);      
uint16_t ntohs(uint16_t netshort); 

主机序转网络序
unsigned long long htonll(unsigned long long val) {
if(__BYTE_ORDER == __LITTLE_ENDIAN) {
return (((unsigned long long )htonl((int)((val << 32) >> 32))) << 32) | (unsigned int)htonl((int)(val >> 32)); }
else if (__BYTE_ORDER == __BIG_ENDIAN) { return val; }

 
posted @ 2022-10-09 12:23  cv程序人  阅读(150)  评论(0)    收藏  举报