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

网络字节序:是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 @   cv程序人  阅读(120)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示