网络字节序转换函数(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的详细信息,网上的资料太多了,本文就不详述了。

 

 

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值