我实现Huffman算法中C.我有基本功能下降到其中获得二进制码字的点。因此,例如,ABCD将是100011000或类似的东西。现在的问题是怎么写的二进制形式的代码压缩文件英寸我的意思是如果我写它通常每1和0将是一个字符,所以没有压缩。

我需要写那些1和0在它们的位形式。是,可能在C.如果这样怎么办?

有帮助吗?

解决方案

,直到你有足够的比特来填充字节,然后把它写收集位..

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);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top