如何用C语言从两个或多个字节中读取特定的一组位

问题描述 投票:0回答:1

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

0100 0011    0110 1100

这里是2个字节。我希望从第一个字节开始的位索引直到第二个字节中的位都存储在数组中。

c arrays byte bit
1个回答
1
投票

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

这里的方法是将所需的位移到最右边的位置。因此,对于第一位,我们必须向右移动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
© www.soinside.com 2019 - 2024. All rights reserved.