判断大小端序的C程序

概念

大端格式:字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。
小端格式:与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。

5A6C5A是高字节、6C是低字节,在大端序机器中,高字节位于低地址中,即在大端序中按照5A6C存储,在小端序中按照6C5A存储。

为什么存在这种模式

因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bitchar之外,还有16bitshort型,32bitlong型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。

代码实现

请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1

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

分析:

联合体union的存放顺序是所有成员都从低地址开始存放

short int x;

char x0,x1;

x=0x1122;

x0=((char*)&x)[0];  //低地址单元
x1=((char*)&x)[1];  //高地址单元

若x0=0x11,则是大端; 若x0=0x22,则是小端......

你可能感兴趣的:(判断大小端序的C程序)