Big Endian 和 Little Endian

引述  

用 C 語言窺探記憶體

http://libai.math.ncu.edu.tw/bcc16/pool/1.33.shtml

現在我們試探電腦的記憶體設計屬於 Big-Endian 還是 Little-Endian。
如果令 n 是 int 型態的變數, 令 n 的值為 2562 + 2*256 + 3, 則它的位元排列是
          00000000000000010000001000000011
將這 32 bits 每 8 bits 組成一個 byte,共應分成四個字元:
          00000000 和 00000001 和 00000010 和 00000011
若以無號整數解讀,這四個字元的值應該是
          0 和 1 和 2 和 3
CPU 一定會配給連續四個記憶體給 n, 但是這四個記憶體,卻有兩種放置四個 byte 的可能順序。 如果我們一律按照記憶體位址從小到大的順序來講, 則四個記憶體放置的字元可能是
          先 00000000 然後 00000001 然後 00000010 最後 00000011
按照這種順序放置的電腦,稱為 Big-Endian (大頭派); 也可能是
          先 00000011 然後 00000010 然後 00000001 最後 00000000
按照這種順序放置的電腦,稱為 Little-Endian (小頭派)。

為什麼叫『大頭』派?因為電腦把『大』的位數放在『前面』 (記憶體編號小的就是前面)。 就好像我們寫十進制數字 123 的意思一百二十三 (100 + 20 + 3), 也就是最大位--百位,寫在前面。因此,我們自己屬於『大頭派』。

相反地,如果把『小』的位數放在『前面』,那就是『小頭』派了。 如果有一個民族的文字,把 123 解釋成三百二十一 (1 + 20 + 300), 那他們就是『小頭派』。 阿拉伯文的文字書寫,是從右向左橫寫,但是遇到數字的時候, 卻是跟我們一樣從左向右寫。如果阿拉伯人讀文字與數字的時候, 都是從右向左讀,則他們會先讀到數字的最小位。 在這個意義之下,阿拉伯人是『小頭派』。


常和hardware designer為了endian的事,讓我software這邊一下改big-endian一下改little-endian,真被弄得快瘋了,需要一個bash script讓我輕易轉換endianess...輸入可以是file也可以是string

Comments