很多人写了很多代码,定义了很多文档,但可能却还不知道MSB/LSB Big-Endian/Small-Endian的区别 。说来惭愧,本人也在此问题上犯了错误,故贴以明示
MSB:Most Significant Bit
LSB:Lest Significant Bit
通常,一个芯片的管脚中,对于一个多比特的信号,比如32根的地址线,从低开始按0到31编个号。MSB就是31,LSB就
是0。
- 如果标记为 ADDR[31:0]就是 MSB first的方式
- 如果标记为 ADDR[0:31]就是 LSB first的方式
即32根的地址线,从低开始按0到31编个号。MSB就是31,LSB就是0
如果非要对逻辑的字节意思做一个MSB,LSB的定义:
那么对于Byte来讲:依次为高比特位-->低比特位,对应于MSB-->LSB
例如:
01011001 MSB-->LSB
在定义传输时,需要指明是MSB先传输还是LSB先传输,如果是MSB先传输,则先传输0,依次为1,0,.......
Big-Endian
Small-Endian
指的都是对于多字节的数据类型(比如4字节的32位整数),其多个字节的顺序问题是最高
字节在前(Big-Endian)还是最低字节在前(Small-Endian)。
比如:
对于123456789这个整数,其16进制为0x075BCD15
- Big-Endian的方式,4个字节依次是:07 4B CD 15,
- Small-Endian的顺序正相反,是:15 CD 4B 07
网络传输多字节时以Big-Endian的方式传输
系统 一般 均会提供htons()或ntohs()函数还进行主机顺序和网络顺序的转换。