在網(wǎng)絡(luò)編程里,網(wǎng)絡(luò)字節(jié)序是big-endian的,而大部分的PC的系統(tǒng)都是X86處理器系列,X86采用的是little-endian,所以需要將 網(wǎng)絡(luò)數(shù)據(jù)流轉(zhuǎn)換成本地?cái)?shù)據(jù)流的話(huà),需要進(jìn)行字節(jié)序的轉(zhuǎn)換。
標(biāo)準(zhǔn)庫(kù)里提供了hlton()和nthl()兩個(gè)函數(shù)來(lái)支持轉(zhuǎn)換。 hston(unsigned short), hlton(unsigned long) 將本地字節(jié)序轉(zhuǎn)換為網(wǎng)絡(luò)字節(jié)序 ntohl(unsigned long), ntohs(unsigned short) 將網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換為本地字節(jié)序
但是對(duì)于64位的整數(shù)進(jìn)行轉(zhuǎn)換,標(biāo)準(zhǔn)庫(kù)并沒(méi)有提供相應(yīng)的轉(zhuǎn)換函數(shù),本文將給出個(gè)人原創(chuàng)的64位字節(jié)序轉(zhuǎn)換函數(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; }
關(guān)于little endian和big endian的詳細(xì)信息,網(wǎng)上的資料太多了,本文就不詳述了。
|
|