little-endian VS. big-endian

longtrue發表於2007-10-23

被這兩件東西搞了很久,曾經看資料時理解了,但過一段分間又很容易忘記了。今天遇到一道題,要寫個程式檢查所用的系統是big endian還是little endian。首先,要知道什麼是big endian,什麼是little endian?一些資料的解釋如下:

位元組排序

含義

Big-Endian

一個Word中的高位的Byte放在記憶體中這個Word區域的低地址處。

Little-Endian

一個Word中的低位的Byte放在記憶體中這個Word區域的低地址處。

我覺得這樣很不適合記憶,很快就混淆了。用big endian對應值高位優先,little endian對應低位優先,更容易記憶些。計算機在使用記憶體時總是從低地址向高地址擴充套件的,所謂值高位優先就是把要儲存的數值的高位放在記憶體的低位,低位優先就是把值的低位放在記憶體的低位。例如要把十六進位制表示的數值0x3132儲存到地址為0x00080開始的記憶體裡,在big endianlittle endian分佈如下:

big-endian

little-endian

0x00080

0x31(高位優先)

0x32(低位優先)

0x00081

0x32

0x31

有了以上的知識,要做上面的題目就容易了。我的做法如下:

unsigned short int x = 0x3132;

char h, l;

h = *(char *)&x;

l = *(char *)((char *)&x + 1);

if(h == 0x31 && l == 0x32)

printf("big endian!n");

else if(h == 0x32 && l == 0x31)

printf("little endian!n");

當然,也還有其它做法,不用同時檢查兩個位元組也行,就只檢查低位記憶體其實已經足夠的了。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7406370/viewspace-978125/,如需轉載,請註明出處,否則將追究法律責任。

相關文章