在網路程式設計裡,網路位元組序是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的詳細資訊,網上的資料太多了,本文就不詳述了。
python 網路位元組序轉換 網路位元組序
一.位元組序 位元組序是由於不同的主處理器和作業系統,對大於乙個位元組的變數在記憶體中的存放順序不同而產生的。位元組序通常有大端位元組序列和小端位元組序兩種分類方法。由於主機的千差萬別,主機的位元組序不能做到統一,但是網路上傳輸的數值,它們有統一的規定。網路位元組序 是指多位元組變數在網路傳輸時的表...
主機位元組序和網路位元組序轉換
為什麼要轉換?主機位元組序 整數在記憶體中儲存的順序,不同的處理器對應不容的模式 little endian 將低序位元組儲存在起始位址 big endian 將高序位元組儲存在起始位址 網路位元組序 整數在網路中的傳送順序 網路位元組順序是tcp ip中規定好的一種資料表示格式,它與具體的cpu型...
網路位元組序與主機位元組序的轉換
在對ip位址結構體sockaddr in賦值的時候,經常會用到下列的函式htonl,htons,inet addr,與之相對應的函式是ntohl,ntohs,inet ntoa。檢視這些函式的解析,會發現這些函式其實是與主機位元組序和網路位元組序之間轉換有關。就是什麼網路位元組序,什麼是主機位元組序...