大端小端模式以及相互轉化

2021-09-24 18:21:59 字數 1512 閱讀 6373

大端模式,是指資料的高位元組儲存在記憶體的低位址中,而資料的低位元組儲存在記憶體的高位址中。(big-endian)

小端模式,是指資料的高位元組儲存在記憶體的高位址中,而資料的低位元組儲存在記憶體的低位址。(little-endian)

unsigned

int value =

0x12345678為例

我們可以用unsigned

char buf[

4]來表示value

高位址  --

----

----

----

-  buf[3]

(0x78

)-- 低位

buf[2]

(0x56

)  buf[1]

(0x34

)  buf[0]

(0x12

)-- 高位

------

----

----

-  低位址

little-endian: 低位址存放低位,如下:

高位址  --

----

----

----

-  buf[3]

(0x12

)-- 高位

buf[2]

(0x34

)  buf[1]

(0x56

)  buf[0]

(0x78

)-- 低位

------

----

----

低位址

這裡資料以16進製制儲存,記憶體位址1個位元組=8位,0000 0000,4個0表示的範圍為16,則乙個位元組儲存的數字為2位16進製制,即以0x12劃分,而不是0x123

1個記憶體單元的長度是8bits,以8位二進位製作為乙個儲存單元,也就是乙個位元組。

對於32位系統,一次讀取的記憶體單元為4個位元組的偶數倍

所以轉換方法也可以自己寫,對於每1個位元組來操作即可

#define ntohs(x)	__darwin_osswapint16(x) 

//16位資料型別網路位元組順序到主機位元組順序的轉換

#define htons(x) __darwin_osswapint16(x)

//16位資料型別主機位元組順序到網路位元組順序的轉換

#define ntohl(x) __darwin_osswapint32(x)

//32位資料型別網路位元組順序到主機位元組順序的轉換

#define htonl(x) __darwin_osswapint32(x)

//32位資料型別主機位元組順序到網路位元組順序的轉換

記憶方法:ntohl 以中間的to隔開,則為n->hl 意為 net to host unsigned long ,32位資料型別網路位元組順序到主機位元組順序的轉換。

小端模式和大端模式 大端模式和小端模式

0x123456在記憶體中的儲存方式 大端模式 低位址 小端模式 低位址 不難看出大端模式比較符合人的直觀認識 1.一開始是由於不同架構的cpu處理多個位元組資料的順序不一樣,比如x86的是小段模式,keil c51是大端模式。但是後來網際網路流行,tcp ip協議規定為大端模式,為了跨平台通訊,還...

大端模式 小端模式

大端模式,是指資料的低位 就是權值較小的後面那幾位 儲存在記憶體的高位址中,而資料的高位儲存在記憶體的低位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理 位址由小向大增加,而資料從高位往低位放 小端模式,是指資料的低位儲存在記憶體的低位址中,而資料的高位儲存在記憶體的高位址中,這種儲存模式將...

大端模式小端模式

大端 和 小端 可以追溯到1726年的jonathan swift的 格列佛遊記 其中一篇講到有兩個國家因為吃雞蛋究竟是先打破較大的一端還是先打破較小的一端而爭執不休,甚至爆發了戰爭。1981年10月,danny cohen的文章 論聖戰以及對和平的祈禱 on holy wars and a ple...