不同機器內部對變數的位元組儲存順序不同,有的採用大端模式(big-endian),有的採用小端模式(little-endian)。
大端模式是指高位元組資料存放在低位址處,低位元組資料放在高位址處。
小端模式是指低位元組資料存放在低位址處,高位元組資料放在高位址處。
在網路上傳輸資料時,由於資料傳輸的兩端可能對應不同的硬體平台,採用的儲存位元組順序也可能不一致,因此 tcp/ip 協議規定了在網路上必須採用網路位元組順序(也就是大端模式) 。
通過對大小端的儲存原理分析可發現,對於 char 型資料,由於其只佔乙個位元組,所以不存在這個問題,這也是一般情況下把資料緩衝區定義成 char 型別 的原因之一。對於 ip 位址、埠號等非 char 型資料,必須在資料傳送到網路上之前將其轉換成大端模式,在接收到資料之後再將其轉換成符合接收端主機的儲存模式。
linux 系統為大小端模式的轉換提供了 4 個函式,輸入 man byteorder 命令可得函式原型:
#include uint32_t htonl(uint32_t hostlong);uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
htonl 表示 host to network long ,用於將主機 unsigned int 型資料轉換成網路位元組順序;
htons 表示 host to network short ,用於將主機 unsigned short 型資料轉換成網路位元組順序;
ntohl、ntohs 的功能分別與 htonl、htons 相反。
that which didn't kill me makes me stronger
大小端模式轉換
不同機器內部對變數的位元組儲存順序不同,有的採用大端模式 big endian 有的採用小端模式 little endian 大端模式是指高位元組資料存放在低位址處,低位元組資料放在高位址處。小端模式是指低位元組資料存放在低位址處,高位元組資料放在高位址處。在網路上傳輸資料時,由於資料傳輸的兩端可能...
大小端轉換
大小端轉換方法 include include define tranverse16 x uint16 x 0xff00 8 uint16 x 0x00ff 8 define tranverse32 x uint32 x 0xff000000 24 uint32 x 0x00ff0000 8 uin...
大小端轉換
short型別 public static short reverseushort short value 簡單分析一下 short型別占用16位,也就是兩個位元組,大小端只需要將兩個位元組互換一下就行。採用位操作,通過和 0x00ffu進行與運算,拿到第二個位元組的內容,然後左移8位,將其放置到第...