Domanda

Io sono l'attuazione del algoritmo di Huffman in C. Ho avuto la funzionalità di base verso il basso fino al punto in cui si ottengono le parole di codice binario. Così, per esempio, ABCD sarà 100.011.000 o qualcosa di simile. Ora la domanda è come si fa a scrivere questo codice in forma binaria nel file compresso. Cioe se scrivo normalmente ogni 1 e 0 sarà un carattere quindi non c'è compressione.

Ho bisogno di scrivere questi 1 e 0 nella loro forma di bit. è quello possibile in C. se sì, come?

È stato utile?

Soluzione

Raccogliere i bit fino ad avere abbastanza bit per riempire un byte ed allora la scrivete ..

es. qualcosa di simile a questo:

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 volta che hai finito di scrivere i bit è necessario svuotare il bit-buffer. Per farlo basta scrivere bit fino current_bit è uguale a zero:

void Flush_Bits (void)
{
  while (current_bit) 
    WriteBit (0);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top