网络字节序:是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; }
标签:__,转换,字节,主机,long,return,uint32
From: https://www.cnblogs.com/HBB666/p/16771716.html