2017年11月15日 星期三

Android 系統筆記 - Big/Little endian

雖然是很一般的東西但偶而腦筋還是會打結呢....(´・ω・`;)

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 只有影響到該變數在記憶體存放的位置而已  (*´∀`)ノ

沒有留言:

張貼留言

不定參數印 log

From the UNIXProcess_md.c #ifdef DEBUG_PROCESS   /* Debugging process code is difficult; where to write debug output? */ static void deb...