1. 程式人生 > 實用技巧 >C語言判斷大小端的幾種方法

C語言判斷大小端的幾種方法

在作業系統中,經常會用到判斷大小端,很多面試題中也會經常遇到,以前的時候沒有總結過,這裡總結一下。

以後用到了就直接可以用了。

  所謂的大小端,大致的解釋意思就是:

【大端模式】 CPU對運算元的存放方式是高地址存放低位,低地址存放高位。

【小端模式】CPU對運算元的存放方式是高地址存放高位,低地址存放低位。

大多數ARM處理器都是採用的小端模式,PowerPC是採用的大端模式,網路位元組序是採用的大端模式。

  常用的有兩種方式來判斷大小端,一種是使用C語言中的聯合體,具體程式碼如下:

1 2 3 4 5 6 7 8 9 10 intcheckCPU() { union w
{ inta; charb; }c; c.a = 1; return(c.b == 1);// 小端返回TRUE,大端返回FALSE }

  其中,linux核心中就是使用這部分的程式碼,程式碼如下所示:

1 2 staticunion{charc[4]; unsignedlongmylong; } endian_test = {{'l','?','?','b'} }; #define ENDIANNESS ((char)endian_test.mylong)

  另外一種就是使用指標的方式,具體程式碼如下所示:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 voidcheckPoint(void) {   inti = 1;    unsignedchar*pointer;    pointer = (unsignedchar*)&i;   if(*pointer)    { printf("litttle_endian"); } else { printf("big endian/n"); } }