[关闭]
@zhutoulwz 2015-03-27T11:03:11.000000Z 字数 549 阅读 2154

CPU大小端问题

cpu

大小端

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

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

而在小端CPU的存放方式:

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

判断大小端

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

  1. bool isLittleEndCPU()
  2. {
  3. int a = 0x1234;
  4. char b = (char) a;
  5. if ((int)b == 0x34)
  6. return true;
  7. else
  8. return false;
  9. }

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

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注