位排序和结束

sud*_*03r 6 c bit-manipulation endianness

我正在逐字节地读取文件.

比如说我有这个字节:0x41(0100 0001)用十六进制表示.

现在,我想要这个字节的前三位,即(010).

我可以使用按位逻辑来提取前三位,但我的问题是前三位是否与机器的endianess无关(即它们不能是001)?

谢谢,

sha*_*oth 7

字节顺序仅适用于字节顺序,而不适用于位顺序.位的顺序在相应的字节内是相同的.


Mic*_*urr 7

想到这一点的另一种方法是只有在你可以单独读取项目的组件时才会应用字节顺序 - 因为你通常可以独立地从内存中读取32位int的各个字节,如果你想将这些字节解释为32 -bit int您需要确保考虑架构的endianess.

通常你不能从内存中读取一个字节的各个位,所以就存储器架构而言,确实没有"位字节式"的概念(我确信存在硬件级别,但不是你能做到的事情)看看软件层面).您可能需要处理(或至少知道)位字节序的一些区域:

  1. 编译器存储位字段位的顺序取决于编译器(并且不一定与硬件平台的字节顺序相关 - 不同的编译器可能会为同一平台不同地排序位字段 - 编译器可能是单向配置的或者使用命令行选项的其他选项,类似于char可能设置为有符号或无符号的方式).但是,C位字段实际上与硬件寻址无关.

  2. 某些硬件架构允许您处理单个位(例如ARM Cortex M3),因此在这种情况下,您需要知道如果要使用该功能,架构如何安排用于寻址的位.

  3. 如果您通过串行链路发送比特 - 硬件接口通常会指定最高有效位或最低有效位是否先在线路上"移出".