您的位置:首页 > 编程语言 > C语言/C++

c语言简单判断cpu类型

2008-03-22 21:24 218 查看
虽然几乎没有悬念的
绝大多数的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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: