12

我正在用 C 实现霍夫曼算法。我已经得到了基本功能,直到获得二进制码字。例如, abcd 将是 100011000 或类似的东西。现在的问题是如何在压缩文件中以二进制形式编写此代码。我的意思是如果我正常写它,每个 1 和 0 将是一个字符,所以没有压缩。

我需要以位的形式写出这些 1 和 0。在 C 语言中这可能吗?如果可以,怎么办?

4

1 回答 1

21

收集位,直到您有足够的位来填充一个字节,然后再写入它。

例如这样的:

int current_bit = 0;
unsigned char bit_buffer;

FILE *f;

void WriteBit (int bit)
{
  if (bit)
    bit_buffer |= (1<<current_bit);

  current_bit++;
  if (current_bit == 8)
  {
    fwrite (&bit_buffer, 1, 1, f);
    current_bit = 0;
    bit_buffer = 0;
  }
}

完成写入位后,您必须刷新位缓冲区。为此,只需写入位,直到 current_bit 等于 0:

void Flush_Bits (void)
{
  while (current_bit) 
    WriteBit (0);
}
于 2009-12-06T20:38:45.213 回答