以下是一个示例代码,可以实现输入一组字节数组,按每3比特分组,输出每一分组的比特数据。

#include <stdio.h>
#include <stdint.h>

int main() {
    uint8_t arr[10] = {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x11, 0x22};
    int len = 10;

    int bit_count = 0;
    uint8_t cur_byte = 0;
    for (int i = 0; i < len; i++) {
        uint8_t byte = arr[i];
        int shift = bit_count % 3;
        cur_byte |= byte << shift;
        bit_count += 8 - shift;
        if (bit_count >= 3) {
            printf("%02x\n", cur_byte & 0x07);
            cur_byte >>= 3;
            bit_count -= 3;
        }
    }
    if (bit_count > 0) {
        printf("%02x\n", cur_byte & 0x07);
    }

    return 0;
}

这个代码中,我们定义了一个长度为10的字节数组,然后按照每3比特分组,输出每一分组的比特数据。具体的思路是,我们维护一个当前字节和当前比特数的变量,然后遍历输入的字节数组。对于每一个字节,我们将其向左移动当前比特数的位置,然后将其与当前字节进行或操作,得到一个新的字节。如果当前比特数达到了3,那么我们就可以输出这个新的字节的最低3比特,并将当前字节向右移动3位,同时将当前比特数减去3。如果遍历完整个字节数组后,当前字节的比特数仍然大于0,那么我们就可以将其最低的比特输出

C语言输入一组字节数组数组按每3比特分组不足的情况下由下一字节补全组成新的分组按3比特遍历数组打印每一分组的比特数据

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

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