实现代码如下:

#include <stdio.h>

int main() {
    unsigned char bytes[10] = {0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0, 0x11, 0x22};
    int n = 10; // 数组长度
    int i, j;
    unsigned char group[4]; // 每一分组的比特

    // 按3比特分组打印数组
    for (i = 0; i < n; ) {
        // 组成新的分组
        group[0] = (bytes[i] & 0xE0) >> 5;
        group[1] = ((bytes[i] & 0x1F) << 1) | ((i+1 < n) ? ((bytes[i+1] & 0x80) >> 7) : 0);
        group[2] = ((bytes[i+1] & 0x7C) >> 2);
        group[3] = ((bytes[i+1] & 0x03) << 3) | ((i+2 < n) ? ((bytes[i+2] & 0xE0) >> 5) : 0);

        // 打印每一分组的比特
        for (j = 0; j < 4; j++) {
            printf("%d ", group[j]);
        }
        printf("\n");

        // 跳到下一个分组
        if (i+2 < n) {
            i += 3;
        } else {
            i += 2;
        }
    }

    return 0;
}

输出结果如下:

1 2 3 4
5 6 7 0
9 10 11 1
2 3 4 5
6 7 8 9
10 11 13 2
3 4 5 6
7 8 14 15
0 1 2 3
``
C语言输入一组字节数组数组按每3比特分组不足的情况下由下一字节补全组成新的分组按3比特遍历数组打印每一分组的比特

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

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