从一个字节读取'N'位

ddd*_*ddd 1 c mplab

我需要从一个字节读取一个特定的位.我想测试的值是0或1.

unsigned char Buffer[0]=2; 
//or binary 0b00000010
Run Code Online (Sandbox Code Playgroud)

我如何从缓冲区中读取n位.如果它是0或1?例如,如果字节中的7位是0或1

chq*_*lie 7

您必须精确定义如何计算位数:

  • 0或开始1
  • 从最不重要到最重要或其他方式?

假设位0是最不重要的,你可以得到7这个表达式:

int bit7 = ((unsigned char)Buffer[0] >> 7) & 1;
Run Code Online (Sandbox Code Playgroud)

这是一个通用循环:

for (int i = 7; i >= 0; i--) {
    putchar('0' + (((unsigned char)Buffer[0] >> i) & 1));
}
Run Code Online (Sandbox Code Playgroud)