大小端
大端(big endian):低地址存放最高有效字节(MSB),Motorola格式;
小端(little endian):低地址存放最低有效字节(LSB),Intel格式;
对于0x12345678这个数据在两种格式下内存中的存放:
大端(Motorola格式):
小端(Intel格式)
使用一个联合体即可测试所使用的处理器的大小端方法:
typedef union
{
u32 data_u32;
u8 data_u8[4];
} myUnion;
myUnion data;
data.data_u32 = 0x12345678;
printf("%0x: %0x",&(data.data_u8[0]), data.data_u8[0]);
printf("%0x: %0x",&(data.data_u8[1]), data.data_u8[1]);
printf("%0x: %0x",&(data.data_u8[2]), data.data_u8[2]);
printf("%0x: %0x",&(data.data_u8[3]), data.data_u8[3]);
我是电脑是小端模式,所以输出如下,低有效字节78放在低地址0x9f0fe14,高有效字节放在高地址0x9f0fe17:
9f0fe14: 78
9f0fe15: 56
9f0fe16: 34
9f0fe17: 12