场景:
[节点A]< -------- Rf-interface ------> [节点B]
问题:
节点A向节点B发送一个6字节长的有效载荷。在该有效载荷中,存在关于可用时隙的一些信息,共有6个字节* 8位= 48个插槽。每个插槽可以是ON 1或OFF 0.
例如,这些插槽号0,2,5,7都是ON。有效载荷的位表示将是:
10100101000000000 ....直到第48位。
然后,这些信息通过RF接口发送到有效载荷中的节点B.
在Node B,我需要将每个位表示的位置转换为数组中的十进制表示(对于某些gui表示)。
回到例子:
我需要将有效负载转换为以下位:10100101000000000 ...转换为数组中的活动插槽表示:例如
myArray[0] = 1;
myArray[1] = 0;
myArray[2] = 1;
myArray[3] = 0;
myArray[4] = 0;
myArray[5] = 1;
.
.
myArray[48] = x;
我的位掩码并不好,所以任何帮助都值得赞赏 谢谢大家的帮助!
答案 0 :(得分:1)
这个怎么样?:
char *bitsToArray(char *data, int length)
{
char *rv = malloc(8*length);
int i = 0;
for(;i < length; ++i)
{
int j = 0;
for(; j < 8; ++j)
{
rv[i*8+j] = (data[i]>>j)&1;
}
}
return rv;
}
它首先存储最低有效位。如果您希望以相反的位顺序工作,可以将行rv[i*8+j] = (data[i]>>j)&1;
更改为rv[i*8+j] = (data[i]>>(7-j))&1;
答案 1 :(得分:0)
for (int i = 0; i < buffer_size; i++) {
for (int j = 7; j >= 0; j--) { // most significant bit first
myArray[8 * i + j] = buffer[i] >> j & 1;
}
}
答案 2 :(得分:0)
根据您的示例,我假设位图,给定的6字节数组是:
unsigned char bitmap[6] = {0xa5, 0x00, 0x00, 0x00, 0x00, 0x00};
结果的目的是:
int myArray[48];
我倾向于从后到前遍历myArray,并根据位图中最低位的测试分配每个值,然后在每次循环迭代时右移。
int bmi = 5; // set bitmap index to end
int mai = 47; // set myArray index to end
int i = 0;
while (mai >= 0) {
for (i = 0; i < 8; i++) {
myArray[mai] = bitmap[bmi] & 0x01;
bitmap[bmi] >>= 1;
--mai;
}
--bmi;
}
for (mai = 0; mai < 48; mai++) printf("%d", myArray[mai]);
printf("\n");