c語言簡單判斷cpu類型

雖然幾乎沒有懸念的
絕大多數的pc的cpu是little-endian
不過這個程序的思路還是讓我感到佩服
當然 也是我太菜

方法1
定義聯合結構體
union endian_un
{
    short var;
    char bits[sizeof ( short ) ];
};
short 在32位下佔2個字節 int 佔4個字節
然後var=0x0102
這樣字符數組也存上了這個數
看看bits[0]裏存放的是1還是2就可以判斷了

方法2
將short強制轉換爲char
看看char裏是short的高位還是低位就可以判斷了




/***************************************************************************
 *   Copyright (C) 2008 by root   *
判斷cpu類型    big-endian or little-endian
線程模型:posix
gcc 版本 4.1.2 20070925 (Red Hat 4.1.2-33)
***************************************************************************/




#include <stdio.h>

union endian_un
{
    short var;
    char bits[sizeof ( short ) ];
};


int main ( int argc, char *argv[] )
{
    union endian_un flag;
    flag.var=0x0102;
    if ( sizeof ( short ) ==2 )
    {
        if ( flag.bits[0]==1&&flag.bits[1]==2 )
        {
            printf ( "judged by first method big-endian/n" );
        }
        if ( flag.bits[0]=2&&flag.bits[1]==1 )
        {
            printf ( "judged by first method little-endian/n" );
        }
    }
    unsigned short f=0x4321;
    if ( * ( unsigned char * ) &f==0x21 )
    {
        printf ( "judged by second method little-endian/n" );
    }
    if ( * ( unsigned char * ) &f==0x43 )
    {
        printf ( "judged by second method big-endian/n" );
    }

    return 1;
}





















 
發佈了29 篇原創文章 · 獲贊 2 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章