c - 将 8 位移动到 8 个单独字节的最佳方法

标签 c bit

<分区>

我有一个 8 位的状态寄存器。我想将每个单独的位移动到一个字节以进行进一步处理。看起来应该很容易,但我想出的每一个解决方案都很复杂。我正在考虑使用 for next 循环遍历这些位并将它们转储到一个数组中,但我的解决方案太困惑了。

最佳答案

这基本上就是您要尝试做的事情。它使用按位运算符和 uint8_t数组使每个位成为一个单独的字节:

void bits_to_bytes(uint8_t status, uint8_t bits[8])
{
    int ctr;
    for( ctr = 0; ctr < 8; ctr++ )
    {
        bits[ctr] = (status >> ctr) & 1;
    }
}

好的,所以更深入一点:

此代码循环遍历一个字节中的位,然后分配 bits[bit_number]bit_number status 的第 1 位.

如果你想反转位的存储顺序,只需更改 bits[ctr]bits[(8-1)-ctr] .

关于c - 将 8 位移动到 8 个单独字节的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57683704/

相关文章:

algorithm - 位交换 O(logN)?

c - 获取 float 与其邻居之间的距离

c++ - 将 Opus 与 PortAudio 结合使用

c - 如何从 vb6 调用 native C DLL

c - c 中 pow() 的语法错误

c - 有没有一种编程方法可以判断符号链接(symbolic link)是否指向 C 中的文件或目录?

编译器使用局部变量而不调整 RSP

c++ - 为什么使用字符串初始化的 C++ 位集会被反转?

c - "Marking"C 中的指针与 "attributes"

java - 位数组 Java 的高效连接