12

ハフマン アルゴリズムを C で実装しています。基本的な機能は、バイナリ コードワードが取得されるところまであります。たとえば、abcd は 100011000 などになります。問題は、このコードをバイナリ形式で圧縮ファイルにどのように書き込むかです。つまり、普通に書いたら1と0がそれぞれ1文字になるので、圧縮はありません。

これらの 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 がゼロになるまでビットを書き込みます。

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