C/C++中的位顺序

Dud*_*ero 10 c c++ bit

我必须实现一个定义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

Jus*_*eff 11

Endian-ness取决于平台.无论如何,除非您正在序列化您可能尝试执行的字节,否则您不必担心实际的顺序.在这种情况下,您仍然不需要担心单个字节在机器上时的存储方式,因为无论如何您都必须单独挖掘这些位.幸运的是,如果按位AND与1,则无论存储顺序如何,都会获得LSB; bit-AND with 2,你得到下一个最重要的位,依此类推.编译器将整理出在机器代码中生成的常量,以便抽象出详细程度.

  • 除非您正在编写设备驱动程序,否则网络和文件内容很少会达到位级别.所有有用的用户级东西都以字节为单位. (2认同)

und*_*gor 5

在C/C++中没有这样的东西.最低有效位是 - 好 - 最低有效位.由于这些位没有地址,因此没有其他排序.

  • 实际上在C中没有比特顺序.然而,不同的物理体系结构可以以不同的顺序存储比特.由于OP正在制定协议,我认为解释这种差异非常重要. (3认同)