将文件以位形式写入C中的文件

时间:2009-12-06 20:33:40

标签: c bit-manipulation binaryfiles huffman-code

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

我需要用它们的位形式写出1和0。如果是这样的话,那可能吗?

1 个答案:

答案 0 :(得分:19)

收集位,直到有足够的位来填充一个字节,然后将其写入..

E.g。像这样的东西:

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等于零:

void Flush_Bits (void)
{
  while (current_bit) 
    WriteBit (0);
}