可以使用位运算符和循环来实现:

#include <stdio.h>

int main() {
    unsigned char random[] = {0x69, 0x86, 0x10, 0xC7};
    int i, j;
    for (i = 0; i < 4; i++) {
        for (j = 7; j >= 0; j -= 3) {
            printf("%d", (random[i] >> j) & 0x07);
        }
    }
    return 0;
}

输出结果为:

01101001100001100001000011000111

解释一下代码:

  • 首先定义了一个无符号字符数组 random,其中存储了字节数组 {0x69, 0x86, 0x10, 0xC7}
  • 然后使用两个循环,外层循环遍历每个字节,内层循环遍历每个字节的每个三位二进制数。
  • 对于每个三位二进制数,使用右移和按位与运算符提取出它的值,并直接输出到控制台上。

需要注意的是,按照每3bit打印时,需要将一个字节拆分为若干个三位二进制数,因此需要使用右移运算符和按位与运算符。右移运算符可以将一个数的二进制表示向右移动指定的位数,把低位溢出,高位补零。按位与运算符可以将两个数的二进制表示的每一位进行比较,如果都是1,则结果为1;否则结果为0。在这里,我们使用按位与运算符 & 将一个字节的二进制表示的每个三位数的值提取出来,然后直接输出到控制台上

C语言假如给一组字节数组为random=0x690x860x100xC7其bit串为01101001100001100001000011000111按照每3bit打印此bit串

原文地址: https://www.cveoy.top/t/topic/cTA0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录