big endian&little endian

在機器層級的指令集裡有些特定的data type,如int, float
以integer bit representation為例,可分為LSB(least significant bit 代表2^0)和MSB(most significant bit 代表 2^(n-1))

我們一般書寫二進位的描述,MSB在左邊,LSB在右邊。
例如書寫一千二百三十四會先寫 1再寫234 (positional notation),就是big endian(從big end開始)寫法,這在一般程式語言裡numeric literal也是這樣表示。

在記憶體中是以多個byte儲存,就會有哪個byte在低位哪個byte在高位
如果方向從MSB開始以byte為單位依序存進記憶體,就是big end=> big endian,
如果方向從LSB開始以byte為單位依序存進記憶體,就是little end=> little endian, 而在記憶體中資料儲存依序的順序是從低位(低位址)開始算。

big endian也叫做network byte order,其實應該是network byte order採用big endian(rfc 1700), 例如ip header裡的total length欄位是跨byte。

對應network byte order是host byte order,這個就要看host本身是big/little endian

ps. MSB: most significant bit, significant中文翻成最高有效位。也可以想成最重要的位元(最大值), 例如平常我們說 1234,一千就是最重要的位(10進位),代表這個數字是1千多。相反地,4是最小的位(10進位),是這個數字最不重要的位,對這個數字大小的影響最小。

以下是用程式判斷big endian or little endian

little endian的系統有個特色,可以直接type punning而不影響值

This entry was posted in General. Bookmark the permalink.

Leave a Reply