嵌入式面试之————大小端
当跨平台或者网络通信的时候,总需要考虑大小端通信。
大端:LSB, least significant byte 。常用于power pc ,keil C51。
小端:MSB,most significant byte。常用于x86,ARM,DSP。
大端:低高高低。地地址对应高字节;
类似字符串顺序处理,地址从小向大增加,数据从高位往地位放。大端符合人类正常思维。
小端:低低高高。低地址对应低字节;
符合逻辑思维,高地址权值高,低地址权值低。小端利于计算机处理。
数据:高字节在前,低字节在后。左高右低。
地址:低地址在前,高地址在后,左低右高。
在32位机器中,char 1字节,short2字节,int4字节。假设有int型数据,0x12345678,其中12是最高字节,78是低字节。
在假设存储地址为1000开始,则排列如下:
常见题型:
1:写代码判断大小端?
2:32位大端机器上,g_ulRet数值为多少?
typedef unsigned int uint;
uint g_ulRet = 0xFFFFFFFF;
uchar funB()
{
uint tmp = 0x12345678;
return tmp;
}
void funA()
{
g_ulRet = funB();
}
解析:
int转换为char型会产生截断,假设地址从0x0000开始,在大端地址0x0000-0003开始,依次存放数据12345678,。tmp存放地址为0000,转换为char类型首地址也为0000,又因为char型是一个字节,强转后char类型,结果为12。