endian詞源
“endian ”一詞來源於喬納森·斯威夫特 的小說格列佛遊記 。小說中,小人國爲水煮蛋該從大的一端(Big-End)剝開還是小的一端(Little-End)剝開而爭論,爭論的雙方分別被稱爲Big-endians和Little-endians。
1980年,Danny Cohen 在其著名的論文"On Holy Wars and a Plea for Peace "中爲平息一場關於字節該以什麼樣的順序傳送的爭論而引用了該詞。
基本的字節序
對於單一的字節(a byte ),大部分處理器 以相同的順序處理位元 (bit),因此單字節的存放方法和傳輸方式一般相同。
對於多字節數據,如整數(32位機中一般佔4字節),在不同的處理器的存放方式主要有兩種,以內存中0x0A0B0C0D的存放方式爲例,分別有以下幾種方式:
- 注: 0x 前綴代表十六進制。
大端序
大端序 (英:big-endian)或稱大尾序 。
- 數據以8bit爲單位 :
地址增長方向 → | |||||
... | 0x0A | 0x0B | 0x0C | 0x0D | ... |
示例中,最高有效位 (MSB, Most Significant Byte)是0x0A 存儲在最低的內存地址處。下一個字節0x0B 存在後面的地址處。正類似於十六進制字節從左到右的閱讀順序。
- 數據以16bit爲單位 :
地址增長方向 → | |||||
... | 0x0A0B | 0x0C0D | ... |
最高的16bit單元0x0A0B 存儲在低位。
小端序
小端序 (英:little-endian)或稱小尾序 。
- 數據以8bit爲單位 :
地址增長方向 → | |||||
... | 0x0D | 0x0C | 0x0B | 0x0A | ... |
最低有效位 (LSB,Least Significant Byte)是0x0D 存儲在最低的內存地址處。後面字節依次存在後面的地址處。
- 數據以16bit爲單位 :
地址增長方向 → | |||||
... | 0x0C0D | 0x0A0B | ... |
最低的16bit單元0x0C0D 存儲在低位。
- 更改地址的增長方向 :
當更改地址的增長方向,使之由右至左時,表格更具有可閱讀性。
← 地址增長方向 | |||||
... | 0x0A | 0x0B | 0x0C | 0x0D | ... |
最低有效位(LSB)是0x0D 存儲在最低的內存地址處。後面字節依次存在後面的地址處。
← 地址增長方向 | |||||
... | 0x0A0B | 0x0C0D | ... |
最低的16bit單元0x0C0D 存儲在低位。