对于2个字节的16位整数,在内存中存储这两个字节有两种方法:
(1)低序字节存于起始地址:小端
(2)高序字节存于起始地址:大端
假设现有32位int型数0x12345678
MSB(最高有效字节)(Most Significant Byte)):0x12
LSB(最低有效字节)(Lease Significant Byte):0x78
假设地址从0x4000开始存放:
小端:
0x4000------0x78
0x4001------0x56
0x4002------0x34
0x4003------0x12
逆序
大端:
0x4000------0x12
0x4001------0x34
0x4002------0x56
0x4003------0x78
大部分CPU公司使用小端
小部分CPU公司使用大端
使用代码进行判断
union MyUnion
{
int a;
char b;
};
union MyUnion y1;
y1.a = 0x12345678;
qDebug() << "当前是大端存储吗" << (y1.b == 0x12);
qDebug() << "当前是小端存储吗" << (y1.b == 0x78) ; //true 小端
测试发现我的电脑是小端存储