如何使用霍夫曼代码压缩文件

How to Use Huffman code for compress file?

本文关键字:压缩 文件 代码 霍夫曼 何使用      更新时间:2023-10-16

我的程序将霍夫曼代码存储在char[8]变量中。我想把它存储在一个unsigned char变量中。我这样做了,但认为它不正确,因为当我使用以下代码提取我的文件时,它不起作用:

unsigned char bit2byte ( unsigned char bits[8] ) {
    unsigned char x = 0; 
    for ( int k = 0; k < 8; k++ ) {
        if ( bits[k] == '1' ) 
            x = x | 1;
        x <<= 1; 
    }
    return x; 
}

这行呢:

if ( bits[k] == '1' ) 

bits数组将您的位存储为ASCII字符还是数字值,即如果您尝试会发生什么

if ( bits[k] == 0x01 )

你可能会因为我不能读懂你的心思而否决我。。。

霍夫曼是一种压缩方案,如果你想读取霍夫曼编码的文件,你最喜欢的是解码(即解压缩(

http://en.wikipedia.org/wiki/Huffman_coding

在霍夫曼编码的数据中,每个字符都表示为一个可变数量的比特,因此你不能通过简单地传递文件的固定部分来处理文件,期望在每次调用中返回一个字节——你必须保持每次调用中消耗了多少比特的状态,以及在哪里开始处理比特流以提取下一个字节。

为了正确解码霍夫曼数据,你需要编码树(请参阅维基百科链接(——这个树很可能也存储在文件中——所以实际上你的文件很可能有两个部分:(1(编码/解码树,以及(2(数据——如何存储在文件中是特定于实现的,因此,在尝试解码任何内容之前,首先需要该规范。

希望这能有所帮助。

我不清楚你所说的"不起作用"是什么意思,但可能你需要走另一条路。

for (int k = 7; k >= 0; k--) {

和以前一样。

当然,我也不知道为什么你只使用8个字节来存储8位信息。