c - 如何用C语言从两个或多个字节读取特定的位集

标签 c arrays byte bit

如何从两个或多个字节中读取特定的一组位,以便将其放入一个数组中。 例如:

0100 0011    0110 1100

这里是 2 个字节。我想要位索引从第一个字节开始,直到第二个字节中的位并将其存储在数组中。

最佳答案

运算符>>将字节中的每一位向右移动

这里的方法是将所需的位移动到最右边的位置。因此,对于第一位,我们必须向右移动 7 个位置,对于第二位,我们必须向右移动 6 个位置,依此类推。

运算符&执行逐位AND运算。因此,执行如下:

0x01 & (some_value)

将仅考虑字节的最右位 (LSB)。

其余代码只是将这些位放在数组中正确位置的逻辑

   int  i   = 0;
   char bt1 = 0x43;
   char bt2 = 0x6c;

   char bit_array[16];

   // Get bits from bt1
   for ( i = 0; i < 8; i++ )
   {
      bit_array[i] = 0x01 & ( bt1 >> (7-i) );
   }

   // Get bits from bt2
   for (i = 8; i < 16; i++ )
   {
      bit_array[i] = 0x01 & ( bt2 >> (15-i) );
   }

   printf("bit_array is: \n");

   for (i = 0; i < sizeof(bit_array); i++ )
   {
      printf("%d ", bit_array[i]);
   }

   printf("\n");

   // Shoud print
   //bit_array is:
   //0 1 0 0 0 0 1 1 0 1 1 0 1 1 0 0

关于c - 如何用C语言从两个或多个字节读取特定的位集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33630855/

相关文章:

c# - 读取文件的特定字节

java - 将串行端口输出重定向到套接字

python-3.x - PYVISA:如何传输二进制 block 数据,以便图片正确格式化并保存到我的电脑上?

c - 未找到 ESP8266 RTOS SDK 引脚 16 声明

ios - Swift 4 如何将自定义对象数组转换为 JSON

java - 如何传递调用二维数组作为参数的函数?

c++ - 多维字符串c++

c++ - 一元运算符 "-"对 C/C++(以及不同的编译器)中的无符号数据类型有何作用?

c - Scanf 在 C 中无法正确读取字符串。出了什么问题?

c - Linux中STREAMS的魔力。什么时候结束?