如果只有 1 Byte,就沒有排列順序的問題。
例如:
0x64
但如果一個數字需要多個 Byte 表示,就會遇到「這些 Byte 要怎麼排列、怎麼讀?」的問題。
例如記憶體中有這 4 個 Byte:
12 34 56 78
這串 Byte 到底代表哪個數字?
答案取決於 Endianness:多 Byte 的數值,要用什麼順序排列與解讀。
常見的方式有兩種:Big Endian 與 Little Endian。
記憶體中的 Byte(由前到後):12 34 56 78
Big Endian 認為,最前面的 Byte 是最高位。
最高位 最低位
↓ ↓
12 34 56 78
照順序組合起來:
0x12345678
轉成 Decimal:
0x12 × 256³ = 18 × 16777216 = 301989888
0x34 × 256² = 52 × 65536 = 3407872
0x56 × 256¹ = 86 × 256 = 22016
0x78 × 256⁰ = 120 × 1 = 120
─────────
305419896
Little Endian 則相反,最前面的 Byte 是最低位。
最低位 最高位
↓ ↓
12 34 56 78
要由高位到低位組合,必須把順序反過來:
0x78563412
轉成 Decimal:
0x78 × 256³ = 120 × 16777216 = 2013265920
0x56 × 256² = 86 × 65536 = 5636096
0x34 × 256¹ = 52 × 256 = 13312
0x12 × 256⁰ = 18 × 1 = 18
──────────
2018915346
| 讀法 | 組合結果 | Decimal |
|---|---|---|
| Big Endian | 0x12345678 |
305419896 |
| Little Endian | 0x78563412 |
2018915346 |
同樣是 12 34 56 78,兩種讀法的結果相差超過 17 億。
注意:只有 Byte 的順序反過來,每個 Byte 內部不變(是 78,不是 87)。
最後組合出來的數值,永遠是由高位寫到低位。差別在於記憶體中 Byte 的排列順序:
Big Endian:先出現的 Byte 是高位,所以照順序讀下去。
Little Endian:先出現的 Byte 是低位,所以要從最後讀回最前。
以 12 34 56 78 為例:
Big Endian 讀成 0x12345678
Little Endian 讀成 0x78563412