如何从两个或多个字节中读取特定的一组位,以便将其放入一个数组中。 例如:
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/