我需要实现一个协议,该协议定义了以8位字为单位的数据,并且最不重要的位(LSB)优先。我想使用 unsigned char
实现这个数据,但我不知道在 C/C++ 中LSB和最高有效位(MSB)的位顺序是什么,这可能需要交换位。
有人能解释一下如何确定一个unsigned char
是如何编码的吗:采用 MSB-LSB 还是 LSB-MSB 顺序?
示例:
unsigned char b = 1;
MSB-LSB: 0000 0001
LSB-MSB: 1000 0000
我需要实现一个协议,该协议定义了以8位字为单位的数据,并且最不重要的位(LSB)优先。我想使用 unsigned char
实现这个数据,但我不知道在 C/C++ 中LSB和最高有效位(MSB)的位顺序是什么,这可能需要交换位。
有人能解释一下如何确定一个unsigned char
是如何编码的吗:采用 MSB-LSB 还是 LSB-MSB 顺序?
示例:
unsigned char b = 1;
MSB-LSB: 0000 0001
LSB-MSB: 1000 0000
字节序是与平台相关的。不过,除非您正在序列化字节,否则无需担心实际的位顺序问题。在这种情况下,您仍然无需担心单个字节在计算机上的存储方式,因为您始终需要逐个提取位。幸运的是,如果您使用按位与运算符和1进行运算,无论存储顺序如何,都将获得最低有效位(LSB);使用按位与运算符和2进行运算,您将获得下一个最高有效位,以此类推。编译器将解决在机器代码中生成常量的细节,所以这个层面的细节被抽象掉了。