Escrevendo arquivos em forma de bits para um arquivo em C
-
13-09-2019 - |
Pergunta
Estou implementando o algoritmo de Huffman em C. Eu tenho a funcionalidade básica para baixo até o ponto onde são obtidas as palavras-código binário. assim, por exemplo, ABCD será 100011000 ou algo similar. agora a questão é como você escreve este código na forma binária no arquivo compactado. Quero dizer, se eu escrevo normalmente cada 1 e 0 será um personagem tão não há compressão.
Eu preciso escrever esses 1s e 0s em sua forma pouco. isso é possível em C. de que forma?
Solução
pedaços Coletar até que você tenha bits suficientes para encher um byte e, em seguida, escrevê-lo ..
por exemplo. algo como isto:
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;
}
}
Uma vez que você terminar de escrever seus bits que você tem que lavar o bit-tampão. Para fazer pedaços de modo basta escrever até current_bit igual a zero:
void Flush_Bits (void)
{
while (current_bit)
WriteBit (0);
}