场景:
[节点 A] < -------- Rf 接口(interface) ------> [节点 B]
问题:
节点 A 向节点 B 发送 6 个字节长的有效负载。在此有效负载中,有一些有关可用插槽的信息,例如总共有 6 个字节 * 8 位 = 48 个插槽。每个插槽可以是 ON 1 或 OFF 0。
举个例子,那么这些槽位号0、2、5、7都是ON。有效负载的位表示形式为:
10100101000000000 ....直到第48位。
然后,这些信息通过 RF 接口(interface)以有效负载形式发送到节点 B。
在节点 B,我需要将每个位表示的位置转换为数组中的十进制表示(对于某些 gui 表示)。
回到例子:
我需要将有效负载的位:10100101000000000...转换为数组中的事件插槽表示:例如
myArray[0] = 1;
myArray[1] = 0;
myArray[2] = 1;
myArray[3] = 0;
myArray[4] = 0;
myArray[5] = 1;
.
.
myArray[48] = x;
我不擅长位掩码,所以任何帮助将不胜感激 感谢您的帮助!
最佳答案
这个怎么样?:
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;
关于C:将位位置转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26281475/