C语言输入一组字节数组数组按每3比特分组不足的情况下由下一字节补全组成新的分组按3比特遍历数组打印每一分组的比特数据
以下是一个示例代码,可以实现输入一组字节数组,按每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,那么我们就可以将其最低的比特输出
原文地址: https://www.cveoy.top/t/topic/cTuH 著作权归作者所有。请勿转载和采集!