美文网首页
CPU大小端问题

CPU大小端问题

作者: AlvinL | 来源:发表于2015-03-31 13:24 被阅读229次

    大小端

    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,那么说明是小端模式,反之为大端模式。

    相关文章

      网友评论

          本文标题:CPU大小端问题

          本文链接:https://www.haomeiwen.com/subject/zvkoxttx.html