您現在的位置是:首頁 > 攝影首頁攝影

big endian和little endian的區別

由 侃侃陽光 發表于 攝影2022-12-18
簡介big endian和little endian介紹:大端模式(big endian):資料的高位位元組儲存在記憶體的低地址中,而低位位元組儲存在記憶體的高地址中

什麼是大端儲存格式

big endian和little endian的區別是:big endian是指低地址存放最高有效位元組(MSB),而little endian則是低地址存放最低有效位元組(LSB)。簡單地說就是存放的位元組順序不同,大端方式將高位存放在低地址,小端方式將低位存放在低地址。

例如,16bit寬的數0x1234在Little-endian模式CPU記憶體中的存放方式為:記憶體地址【0x4000 0x4001】存放內容【0x34 0x12】,而在Big-endian模式CPU記憶體中的存放方式則為:記憶體地址【0x4000 0x4001】存放內容 【0x12 0x34】。

高位位元組和低位位元組其實和我們平時所用的十進位制數的個十百千萬類似,例如3521,則3在最高位(千位),其次是5(百位),接著是2(十位),最後是1(個位)。

採用大端方式進行資料存放符合人類的正常思維,而採用小端方式進行資料存放利於計算機處理。但是,採用大端或者小端進行資料存放,其孰優孰劣也沒有定論。

big endian和little endian介紹:

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

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

big endian和little endian的區別

位元組順序是什麼?

位元組順序,又稱端序或尾序(英語:Endianness)。在幾乎所有的機器上,多位元組物件都被儲存為連續的位元組序列。例如在C語言中,一個型別為int的變數x地址為0x100,那麼其對應地址表示式&x的值為0x100。且x的四個位元組將被儲存在儲存器的0x100, 0x101, 0x102, 0x103位置,這就是所謂的位元組序。位元組存放的順序有兩種模式:大端模式和小端模式。

endian是什麼?

“endian”這個詞出自《格列佛遊記》。小人國的內戰就源於吃雞蛋時是究竟從大頭(Big-Endian)敲開還是從小頭(Little-Endian)敲開,由此曾發生過六次叛亂,其中一個皇帝送了命,另一個丟了王位。

我們一般將endian翻譯成“位元組序”,將big endian和little endian稱作“大尾”和“小尾”。

big endian和little endian的作用是什麼?

一個重要的作用就是了解在網路上不同的機器間的資料如何傳輸。

假設我們在網路上有兩臺機器A和B, 其中A為little-endian,B為big-endian

機器A要傳輸上面的整數a給機器B,如何傳輸呢?

過程是這樣的:

機器A先把a在記憶體中的四個位元組:0x01、0x00、0x00、0x00,轉化為網路位元組序0x00、0x00、0x00、0x01,然後一個位元組一個位元組(從0x00到0x01)喂到網路上去,然後機器B從網路上,一個位元組一個位元組地取出四個位元組:0x00、0x00、0x00、0x01,後又會轉化為本地位元組序:0x00、0x00、0x00、0x01,後放入記憶體。因而B正確地得到了來自A的資料a。