LSb ( Least Significant bit ) -- 最低有效位
MSb ( Most Significant bit ) -- 最高有效位
首先它们不表示顺序,仅代表一个二进制数的两个bit位。
MSb代表对二进制数的值影响最大的那个bit,LSb代表对二进制数的值影响最小的那个bit。
按照人类阅读/书写习惯,MSb通常是二进制数最左边的那个bit,LSb是二进制数最右边的那个bit。
当我们需要逐bit处理这个二进制数时(比如数据封包),就会涉及到bit的顺序。
此时我们可以通过LSb和MSb来描述比特序,比如:LSb→MSb、MSb→LSb、LSb优先,MSb优先。
我们知道,计算机系统在存储数据时,通常是以字节为单位的,对于一个多字节的二进制数,该如何存储呢?
要解释这个问题,先引入另两个概念:LSB ( Least Significant Byte )、MSB ( Most Significant Byte )。注意区分bit与Byte。
可以认为包含LSb的字节就是LSB,包含MSb的字节就是MSB。比如 0x12345678,0x12就是MSB,0x78就是LSB。
将MSB存储在低地址,就叫大端模式。
将LSB存储在低地址,就叫小端模式。
还是前面那个数0x12345678,即(0001 0010 0011 0100 0101 0110 0111 1000)B
将其打包到一个二进制流,有多少种打包方式呢?答案是4种:
大端模式 + 字节内MSb优先:0001 0010 0011 0100 0101 0110 0111 1000(等价于整体MSb优先)
大端模式 + 字节内LSb优先:0100 1000 0010 1100 0110 1010 0001 1110
小端模式 + 字节内MSb优先:0111 1000 0101 0110 0011 0100 0001 0010
小端模式 + 字节内LSb优先:0001 1110 0110 1010 0010 1100 0100 1000 (等价于整体LSb优先)
前面说到的都是二进制数,因为在计算机世界,所有的数或者说元数据都是以二进制(数)表示的。
还有一种比较特殊的数据,那就是字符串。它的字节序是固定的,所有的计算机系统都是将字符串左边的字符存在低地址,右边字符存在高地址。
所以字符串是没有大小端说法的,当然也可以理解为:其字节序是统一的小端。
不过按bit处理字符串时,需要指定字节内的比特序。如果未指定,最好按照人类阅读/书写习惯,使用MSb优先的顺序。