我必须实现一个定义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
答案 0 :(得分:11)
Endian-ness取决于平台。无论如何,除非您要序列化您可能尝试执行的字节,否则您不必担心实际的位顺序。在这种情况下,您仍然不需要担心单个字节在机器上时的存储方式,因为您无论如何都必须单独挖掘这些位。幸运的是,如果按位AND与1,则无论存储顺序如何,都会获得LSB; bit-AND with 2,你得到下一个最重要的位,依此类推。编译器将整理出在机器代码中生成的常量,以便抽象出详细程度。
答案 1 :(得分:5)
在C / C ++中没有这样的东西。最低有效位是 - 好 - 最低有效位。由于这些位没有地址,因此没有其他顺序。