Question

Je l'algorithme de mise en œuvre huffman en C. J'ai la fonctionnalité de base vers le bas jusqu'au point où les mots de code binaires sont obtenus. Ainsi, par exemple, ABCD sera 100011000 ou quelque chose de similaire. maintenant la question est de savoir comment vous écrivez ce code sous forme binaire dans le fichier compressé. Je veux dire si je l'écris normalement chaque 1 et 0 aura un caractère donc il n'y a pas de compression.

Je dois écrire ces 1 et de 0 dans leur forme de bits. est-ce possible dans C si oui, comment?

Était-ce utile?

La solution

Collectez les bits jusqu'à ce que vous avez assez de bits pour remplir un octet, puis l'écrire ..

par exemple. quelque chose comme ceci:

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

Une fois que vous avez terminé l'écriture de vos morceaux, vous devez vider la mémoire tampon de bits. Pour ce faire, il suffit d'écrire des bits jusqu'à ce que current_bit est égal à zéro:

void Flush_Bits (void)
{
  while (current_bit) 
    WriteBit (0);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top