C:将位位置转换为十进制

标签 c

场景:

[节点 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/

相关文章:

自动计算批处理价格

c++ - CMake "undefined reference to function"

c - 使用随机值开始循环,然后循环整个范围

c - C语言中*a = *b是什么意思?

c - rand() 播种与 time() 问题

c - 处理 fscanf()

c - 询问姓名并显示输入

C 编程。为什么这不起作用?

调用 open(2) 会忽略 S_IWGRP 和 S_IWOTH 标志

c - Visual Studio未分配的指针不为NULL