Pergunta

Estou implementando o algoritmo de Huffman em C. Eu tenho a funcionalidade básica para baixo até o ponto onde são obtidas as palavras-código binário. assim, por exemplo, ABCD será 100011000 ou algo similar. agora a questão é como você escreve este código na forma binária no arquivo compactado. Quero dizer, se eu escrevo normalmente cada 1 e 0 será um personagem tão não há compressão.

Eu preciso escrever esses 1s e 0s em sua forma pouco. isso é possível em C. de que forma?

Foi útil?

Solução

pedaços Coletar até que você tenha bits suficientes para encher um byte e, em seguida, escrevê-lo ..

por exemplo. algo como isto:

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;
  }
}

Uma vez que você terminar de escrever seus bits que você tem que lavar o bit-tampão. Para fazer pedaços de modo basta escrever até current_bit igual a zero:

void Flush_Bits (void)
{
  while (current_bit) 
    WriteBit (0);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top