大端Big Endian:数据的高字节存储到低位地址中
小端little Endian:数据的低字节存储到低位地址中
举例说明:
32位16进制数据为=0x12345678,
大端存储
地址 0x0 0x1 0x2 0x3
数据 0x12 0x34 0x56 0x78
MSB LSB
小端存储
地址 0x0 0x1 0x2 0x3
数据 0x78 0x56 0x34 0x12
LSB MSB
MSB是Most Significant Bit的缩写,指最高有效位
LSB是Least Significant Bit的缩写,指最低有效位。
处理器基本上都是字节编址,无法直接操作位,但是在C语言中,可以用结构体来实现对位的操作,其语法规定:先声明的成员位于低地址,后声明的成员位于高地址。
举例,以小端处理器为例,
struct onebyte {
unsigned char bt0:1,
bt1:1,
bt2:1,
bt3:1,
bt4:1,
bt5:1,
bt6:1,
bt7:1;
};
main{
ch= 0x98;
struct onebyte byte=(struct onebyte)&ch;
printf(“bt0 is :%u\n”,byte->bt0);
printf(“bt1 is :%u\n”,byte->bt1);
printf(“bt2 is :%u\n”,byte->bt2);
printf(“bt3 is :%u\n”,byte->bt3);
printf(“bt4 is :%u\n”,byte->bt4);
printf(“bt5 is :%u\n”,byte->bt5);
printf(“bt6 is :%u\n”,byte->bt6);
printf(“bt7 is :%u\n”,byte->bt7);
}
打印结果为:
bt0 is :0
bt1 is :0
bt2 is :0
bt3 is :1
bt4 is :1
bt5 is :0
bt6 is :0
bt7 is :1
说明一个字节内,小端处理器是按照LSB<->MSB的顺序进行
bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7
0 0 0 1 1 0 0 1
LSB MSB
对于大端处理器其位序正好与小端处理器相反
bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7
1 0 0 1 1 0 0 0
MSB LSB
所以如果大端处理器的数据如果期望向小端处理器系统传输数据就需要进行转换,以0x98数据为例,大端处理器的0x98如果期望小端处理器也认为是0x98,那么其写存储器时就必须按照自己的0x19去写入存储器,这样小端处理器直接从mem读取后就会认为是0x98.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)