Big Endian 就是把最高位元組存到地址的最低位元. (這句話hen難理解對吧)
直接上範例:
地址假設我們從 0x00000000 開始
假設你有一個 32 位元的 integer 如下
int32_t big = 0x12345678;
地址最低位元當然就是 0x0000000囉
那麼最高位元組指的是什麼呢? 就是你的 0x12啦
Mapping到記憶體之後會變成這樣:
Address | Value |
0x00000000 | 0x12 |
0x00000001 | 0x34 |
0x00000002 | 0x56 |
0x00000003 | 0x78 |
反過來說 Little-endian 就是會變成這樣囉:
Address | Value |
0x00000000 | 0x78 |
0x00000001 | 0x56 |
0x00000002 | 0x34 |
0x00000003 | 0x12 |
那假設你是一個 array 會怎麼樣呢?
我們令 int32_t test[2] = {0x12345678, 0x11223344}
記憶體的排列會變成這樣唷!
Address | Value |
0x00000000 | 0x78 |
0x00000001 | 0x56 |
0x00000002 | 0x34 |
0x00000003 | 0x12 |
0x00000004 | 0x44 |
0x00000005 | 0x33 |
0x00000006 | 0x22 |
0x00000007 | 0x11 |
也就是 Big-Endian 或者 Little-Endian 只有影響到該變數在記憶體存放的位置而已 (*´∀`)ノ
沒有留言:
張貼留言