大小端模式轉換函式

2022-02-13 14:25:07 字數 917 閱讀 2721

不同機器內部對變數的位元組儲存順序不同,有的採用大端模式(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位,將其放置到第...