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;
}
绝大多数的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;
}
相关文章推荐
- mybatis 传入一个简单类型的参数,if判断的两种写法
- C语言学习笔记(二)--从最简单的数据类型开始
- C语言——判断存储类型是大端还是小端
- C语言类型判断
- Linux驱动:TI达芬奇系列kernel中cup类型的判断,以cpu_is_ti81xx()为例
- IT之路-C语言中五大内存区及变量的存储类型、简单shell脚本(上).ZCSDN-2017.7.18
- C语言循环结构简单练习2——判断一个数是否为素数
- 程序猿之---C语言细节16(看了绝对值,编译类型ANSI C和K&R C类型判断,c编译器类型转换bug的细节)
- C语言整数类型及printf格式化输出问题总结复习及进制转换的简单实现
- js 判断各种数据类型的简单方法(推荐)
- 判断cpu类型的另一种方案
- 简单总结C语言中各种类型的指针的概念
- C语言 memcpy函数(增加dst 从第一字节拷贝判断)的内部简单实现方式
- C语言中的简单数据类型包括?
- 判断两个int类型的整数相加,相减是否溢出的C语言代码
- c语言求三角形的面积及判断三角形类型
- javascript 简单高效判断数据类型 系列函数 By shawl.qiu
- 一个简单的数据类型判断:占用不同大小字节的变量比较
- C语言输入三角形边长判断其类型并输出面积实例代码
- C语言实现判断三边形成三角形类型并求面积