2008年9月11日 星期四

Big and Little Endian

dd if=/dev/sda of=mbr.bin bs=512 count=1

xxd mbr.bin //顯示資料的順序是記憶體放置順序的方向,所以MBR signature "0xAA55"且該signature為一個word整數,以此指令顯示的該signature為55AA

od -xa mbr.bin //顯示資料的順序是記憶體放置順序的反方向,所以MBR signature "0xAA55"且該signature為一個word整數,以此指令顯示的該signature為AA55

但C-style字串記憶體存放方式是Big endian,而整數記憶體存放方式是little endian


So, let's imagine some C-style string in memory. You have the word "cat". Let's pretend 'c' is stored at address 1000. Then 'a' is stored at 1001. 't' is at 1002. The null character '\0' is at 1003.


endian指的是當物理上的最小單元比邏輯上的最小單元小時,邏輯單元對映到物理單元的排布關係。

如果你在文件上看到一個雙字組的data,Ex: long MyData=0x12345678要寫到從0x0000開始的記憶體位址時

1. 如果是Big Endian的系統,存到記憶體會變成 0x12 0x34 0x56 0x78,最高位元組在位址最低位元,最低位元組在位址最高位元,依次排列。

2. 如果是Little Endian的系統,存到記憶體會變成 0x78 0x56 0x34 0x12,最低位元組在最低位元,最高位元組在最高位元,反序排列。

比較的結果就是這樣:

big-endian little-endian
0x0000 0x12 0x78
0x0001 0x34 0x56
0x0002 0x56 0x34
0x0003 0x78 0x12

沒有留言: