我正在C语言中实现哈夫曼算法。已经实现了基本功能,直到获取二进制编码字为止,例如abcd将变成100011000或类似的东西。现在问题是如何以二进制形式在压缩文件中写入此代码。我的意思是,如果我正常写入,每个1和0都将成为一个字符,因此不会进行压缩。
我需要以其位形式将这些1和0写入。在C中是否可能?如果可以,怎么做?
我正在C语言中实现哈夫曼算法。已经实现了基本功能,直到获取二进制编码字为止,例如abcd将变成100011000或类似的东西。现在问题是如何以二进制形式在压缩文件中写入此代码。我的意思是,如果我正常写入,每个1和0都将成为一个字符,因此不会进行压缩。
我需要以其位形式将这些1和0写入。在C中是否可能?如果可以,怎么做?
收集位(bit)直到有足够的位填满一个字节(byte),然后写入它。
例如,像这样:
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);
}
WriteBit()
中的前两行代码必须是 bit_buffer <<= 1; if (bit) bit_buffer |= 0x1;
。 - Dr. Jan-Philip Gehrcke