让我们分两个方面来看,可以记忆和理解的更清楚一点,一个是储存方面,另一个是通信方面。下面的例子默认左为高位,右为低位。
一,储存上
LSB小端字节序就是低位地址存储低位的数据,反之,低位地址存储高位的数据就是大端字节序,举个例子。
设置一个变量,赋值0x12345678,如果这里的低位数据0x78存储在了低位地址0x3000 0000上,那么就是小端字节序。反之存储在高位地址0x3000 0003上就是大端字节序。
我们可以利用这个来查询自己设备是大端字节序存储还是小端字节序存储
c语言参考代码
include <stdio.h>
#include <math.h>
#include <windows.h>
#define LSB 0
#define MSB 1
int check_LSB_or_MSB(void);
main(int argc ,char **argv)
{
if(LSB == check_LSB_or_MSB() )
{
printf("the system is using LSB\n");
}
else(MSB == check_LSB_or_MSB())
{
printf("the system is using MSB\n");
}
system("pause");
return 0;
}
int check_LSB_or_MSB(void)
{
int a = 0x12345678;//int占用四个字节
char *p = (char*)&a;//char占用一个字,取出来a的首地址,强制转化成指针类型
if(*p == 0x78)
{
return LSB;
}
else(*p == 0x12)
{
return MSB;
}
}
二,通信上
通信上好理解很多,先发出高位数据,则为MSB,先发出低位数据,则为LSB。例如:0110 0101这个数据去传输。如果先发出的是高位的0,那么就是大端字节序,若先发出低位的1,那么就是小端字节序。