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


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

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

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

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

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

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

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

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

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

1
2
static  union  char  c[4]; unsigned  long  mylong; } 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
void  checkPoint( void )
 
{
 
     int  i = 1;   
   unsigned  char  *pointer;   
 
   pointer = (unsigned  char  *)&i;   
 
    if (*pointer)   
 
   {   
 
              printf ( "litttle_endian" );   
 
        }   
 
        else   
 
        {   
 
               printf ( "big endian/n" );   
 
        }   
 
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM