CPU大小端问题

大小端

CPU有大小端之分,大端是指数据的高位数据保存在低位地址,而低位数据保存在高位地址;小端是指数据的低位数据保存在低位地址,而高位数据保存在高位地址。
那为什么会存在这两种模式?在计算机系统中,是以字节为单位的(8bit),但有些类型的数据,如shortintlong是大于一个字节的,而对于大于8位的处理中,其寄存器宽度大于8位,那么从内存中读取大于一个字节的数据的时候,就会涉及到如何安排这些数据的字节的问题,就产生了大小模两种不同方式。
如两个字节的数据0x1234在大端CPU下存放方式:(假设地址从0x1000开始)

内存地址 0x1000 0x1001
存放内容 0x12 0x34

而在小端CPU的存放方式:

内存地址 0x1000 0x1001
存放内容 0x34 0x12

判断大小端

下面是一个C函数,可以用来判断是否是大小端:

bool isLittleEndCPU()
{
    int a = 0x1234;
    char b = (char) a;
    if ((int)b == 0x34)
        return true;
    else
        return false;
}

关键在于char b = (char) a;这一句,aint强制类型转换为charb得到的是低位地址保存的数据,如果为a的低位数据0x34,那么说明是小端模式,反之为大端模式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容