我正在用 C 实现霍夫曼算法。我已经得到了基本功能,直到获得二进制码字。例如, abcd 将是 100011000 或类似的东西。现在的问题是如何在压缩文件中以二进制形式编写此代码。我的意思是如果我正常写它,每个 1 和 0 将是一个字符,所以没有压缩。
我需要以位的形式写出这些 1 和 0。在 C 语言中这可能吗?如果可以,怎么办?
我正在用 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 等于 0:
void Flush_Bits (void)
{
while (current_bit)
WriteBit (0);
}