网络字节序转换函数(64位)

在网络编程里,网络字节序是big-endian的,而大部分的PC的系统都是X86处理器系列,X86采用的是little-endian,所以需要将

网络数据流转换成本地数据流的话,需要进行字节序的转换。

标准库里提供了hlton()和nthl()两个函数来支持转换。

hston(unsigned short), hlton(unsigned long) 将本地字节序转换为网络字节序

ntohl(unsigned long), ntohs(unsigned short) 将网络字节序转换为本地字节序

#ifndef ULONG64

#define unsigned long long ULONG64

#endif

// host long 64 to network

ULONG64 hl64ton(ULONG64 host)

{

ULONG64 ret = 0;

ULONG high,low;

low = host & 0xFFFFFFFF;

high = (host >> 32) & 0xFFFFFFFF;

low = htonl(low);

high = htonl(high);

ret = low;

ret <<= 32;

ret |= high;

return ret;

}

//network to host long 64

ULONG64 ntohl64(ULONG64 host)

{

ULONG64 ret = 0;

ULONG high,low;

low = host & 0xFFFFFFFF;

high = (host >> 32) & 0xFFFFFFFF;

low = ntohl(low);

high = ntohl(high);

ret = low;

ret <<= 32;

ret |= high;

return ret;

}

关于little endian和big endian的详细信息,网上的资料太多了,本文就不详述了。

经验分享 程序员 微信小程序 职场和发展