Запись файлов в битовой форме в файл на C
-
13-09-2019 - |
Вопрос
Я реализую алгоритм Хаффмана в 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);
}
Не связан с StackOverflow