判断CPU的大小端

首先介绍下大小端的概念。

对于一个数0x1122
使用Little Endian方式时,低字节存储0x22,高字节存储0x11
而使用Big Endian方式时, 低字节存储0x11, 高字节存储0x22

大多数os都是用的小端。

有些专用系统用的大端。

 

方法一:
bool IsBigendian()
{
unsigned short usData = 0x1122; //类型不必解释吧 值得一提的是这里用的是16进制
unsigned char  *pucData = (unsigned char*)&usData;//指向usDate的地址 并且强制转换为 (unsigned char*)类型
return (*pucData == 0x22);// 返回判别式真假
}

 

我的注释:

方法一中先开辟一个short只usData,然后存放0x1122,然后用个char*指针purData指向该值的地址。

 

随后通过purData指针取出usData,如果取出的是0x22,表示cpu是小端的,如果是0x11则是大端的。

方法二:
int checkCPU( )
{
    {
           union w
           {  
                  int  a;
                  char b;
           } c;
           c.a = 1;
           return(c.b ==1);
    }
}  

 

我的注释:同方法一样,保存一个union,如果取出union的时候,a和

b的存放位置和声明位置相反则表示cpu是大端,反之为小端

你可能感兴趣的:(判断CPU的大小端)