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

  在操做系統中,常常會用到判斷大小端,不少面試題中也會常常遇到,之前的時候沒有總結過,這裏總結一下。linux

之後用到了就直接能夠用了。面試

  所謂的大小端,大體的解釋意思就是:網絡

【大端模式】 CPU對操做數的存放方式是高地址存放低位,低地址存放高位。操作系統

【小端模式】CPU對操做數的存放方式是高地址存放高位,低地址存放低位。指針

大多數ARM處理器都是採用的小端模式,PowerPC是採用的大端模式,網絡字節序是採用的大端模式。code

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

int checkCPU()
{
union w
{
int a;
char b;
}c;
c.a = 1;
return (c.b == 1); // 小端返回TRUE,大端返回FALSE
}

  其中,linux內核中就是使用這部分的代碼,代碼以下所示:it

static union { char c[4]; unsigned long mylong; } endian_test = {{ 'l', '?', '?', 'b' } };
#define ENDIANNESS ((char)endian_test.mylong)

  另一種就是使用指針的方式,具體代碼以下所示:io

  void checkPoint(void)

  {

      int i = 1;    
     unsigned char *pointer;    

     pointer = (unsigned char *)&i;    

     if(*pointer)    

     {    

               printf("litttle_endian");    

         }    

         else    

         {    

                printf("big endian/n");    

         }    

  }
相關文章
相關標籤/搜索