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

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

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

 

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

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

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

 

但是对于64位的整数进行转换,标准库并没有提供相应的转换函数,本文将给出个人原创的64位字节序转换函数。

 

#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的详细信息,网上的资料太多了,本文就不详述了。

 

 

你可能感兴趣的:(c/c++)