任何人都可以帮我一些我需要在数据数组上实现位填充的代码吗?该程序适用于使用GNU C的AVR微控制器(Tiny84A)。
unsigned char datas[3] = {00011111,10000001,00000000};
在每组5个中加0,即每隔5个连续1后出现0
因此数据应
00011111,10000001 becomes 00011111 01000000 10000000
我不确定从哪里开始,一个例子会很棒!
答案 0 :(得分:0)
网上有很多关于位填充的例子(在5 1s后插入0)。不幸的是,其中许多涉及读写字符串0和1。
还有比特流的例子。看起来你需要找到每个例子并将它们组合起来。
您需要扩展您的问题,以解释您所做的更多设计决策。
特别是,您希望输入是在数组而不是流中。您是否希望将输出写入同一阵列?这比写入不同的数组有点棘手。比特流将再次不同。
基本思想是保持计数器在输入和输出流中的位置,并在到达8位结束时适当地加载和写入字节。
unsigned char datas[3] = {00011111,10000001,00000000};
int in_byte, in_bit, out_byte, out_bit;
void init()
{
in_byte = 0; in_bit = 0; out_byte = 0; out_bit = 0;
}
int get_bit()
{
int ret = 0;
if (datas[in_byte] & 1 << (7 - in_bit))
{
ret = 1;
{
++in_bit;
if (in_bit == 8)
{
in_bit = 0;
++in_byte;
}
return ret;
}
您必须自己编写void put_bit(int bit)
,但使用&#34;或&#34; operator |
。
您还需要创建一个函数来执行最多5次的循环并添加额外的0。请查看Web上的示例。