电竞比分网-中国电竞赛事及体育赛事平台

分享

網絡字節(jié)序轉換函數(shù)(64位)

 gljin_cn 2016-08-09

在網絡編程里,網絡字節(jié)序是big-endian的,而大部分的PC的系統(tǒng)都是X86處理器系列,X86采用的是little-endian,所以需要將

網絡數(shù)據(jù)流轉換成本地數(shù)據(jù)流的話,需要進行字節(jié)序的轉換。

 

標準庫里提供了hlton()和nthl()兩個函數(shù)來支持轉換。

hston(unsigned short), hlton(unsigned long)  將本地字節(jié)序轉換為網絡字節(jié)序

ntohl(unsigned long), ntohs(unsigned short)  將網絡字節(jié)序轉換為本地字節(jié)序

 

但是對于64位的整數(shù)進行轉換,標準庫并沒有提供相應的轉換函數(shù),本文將給出個人原創(chuàng)的64位字節(jié)序轉換函數(shù)。

 

#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的詳細信息,網上的資料太多了,本文就不詳述了。

 

 

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多