C語言判斷大小端的幾種方法
阿新 • • 發佈:2020-11-06
在作業系統中,經常會用到判斷大小端,很多面試題中也會經常遇到,以前的時候沒有總結過,這裡總結一下。
以後用到了就直接可以用了。
所謂的大小端,大致的解釋意思就是:
【大端模式】 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" );
}
}
|