大端序、小端序和MSB、LSB的区别和举例
1.字节序序
不同平台上数据存储方式: 大端字节序、小端字节序
字节序就是一个多字节数据的低位置(一般是低8位)放置在存储单元的高有效位(高地址) 还是 低有效位(低地址) 的概念;
讲的是 byte 层面上的整个数据,而不是 bit 层面, 一个字节有8位且从右到左等于低位到高位是规定好的,不用考虑
小端字节序(主机序):把最低 字节 放在 低地址的存储方式;例如 unsigned int data = 0x 12345678 (0x78 占1字节且为最低位 ,十六进制)
大端字节序(网络序):把最高 字节 放在 低地址的存储方式 。(网际传输数据的方式用大端序 ,更适合看,和写出来的一样)
小端字节序 | 大端字节序 | 内存 |
---|---|---|
0001 0010 (12) | 0111 1000 (78) | |
0011 0100 (34) | 0101 0110 (56) | |
0101 0110 (56) | 0011 0100 (34) | |
0111 1000 (78) | 0001 0010 (12) | 存储器最低位(设0x00) |
单片机:
51单片机是大端模式 – cc2530是小端模式
stm32为小端模式
2.位有效
MSB:最高有效位
LSB:最低有效位
讲的是 bit 层面上的整个数据(传输通信时更能看出)
例如 :0xC5 通过 串口传输时,不同的协议有不同的传输定义
0xC5 二进制展开 ---- 1 1 0 0 0 1 0 1
UART为LSB , IIC为MSB
UART: 起始位(0) - 1- 0- 1- 0- 0- 0- 1- 1- 停止位(1)
I2C: 起始信号(拉低) - 1- 1- 0- 0- 0- 1- 0- 1- ACK - 停止信号