Вопрос

Я реализую алгоритм Хаффмана в C.У меня есть базовая функциональность вплоть до получения двоичных кодовых слов.например, abcd будет 100011000 или что-то подобное.теперь вопрос в том, как записать этот код в двоичном виде в сжатый файл.Я имею в виду, что если я напишу это нормально, каждый 1 и 0 будет одним символом, поэтому сжатия не будет.

Мне нужно записать эти 1 и 0 в их битовой форме.возможно ли это в C.если да, то как?

Это было полезно?

Решение

Собирайте биты, пока у вас не будет достаточно битов, чтобы заполнить байт, а затем записать его.

Например.что-то вроде этого:

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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top