我在C中实现了霍夫曼算法。我已经获得了基本功能,直到获得二进制代码字。所以例如,abcd将是100011000或类似的东西。现在的问题是如何在压缩文件中以二进制形式编写此代码。我的意思是如果我正常写它每1和0将是一个字符,所以没有压缩。
我需要用它们的位形式写出1和0。如果是这样的话,那可能吗?
答案 0 :(得分:19)
收集位,直到有足够的位来填充一个字节,然后将其写入..
E.g。像这样的东西:
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);
}