Pregunta

Me estoy poniendo en práctica el algoritmo de Huffman en C. He conseguido la funcionalidad básica abajo hasta el punto en que se obtienen las palabras de código binario. Así, por ejemplo, ABCD serán 100011000 o algo similar. Ahora la pregunta es ¿cómo se escribe este código en forma binaria en el archivo comprimido. Me refiero a si lo escribo normalmente cada 1 y 0 habrá un personaje así que no hay compresión.

Tengo que escribir los 1s y 0s en su forma poco. ¿es posible en C. Si es así, ¿cómo?

¿Fue útil?

Solución

Reunir trozos hasta que tenga suficientes bits para llenar un byte y luego escribirlo ..

por ejemplo. algo como esto:

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

Una vez que haya terminado de escribir sus bits de lo que tiene que limpiar el bit de memoria intermedia. Para hacerlo simplemente escribir bits de hasta current_bit es igual a cero:

void Flush_Bits (void)
{
  while (current_bit) 
    WriteBit (0);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top