-1

我的程序将霍夫曼代码存储在一个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; 
}
4

3 回答 3

3

这条线怎么样:

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

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

if ( bits[k] == 0x01 )

您可能会因为无法读懂您的想法而对我投反对票...

于 2011-07-04T23:49:32.253 回答
0

Huffman 是一种压缩方案,如果您想读取 Huffman 编码文件,您最可能希望对其进行解码(即解压缩)

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

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

要正确解码 Huffman 数据,您将需要编码树(参见 wikipedia 链接)——这棵树很可能也存储在文件中——所以实际上你的文件很可能有两个部分:(1)编码/解码树,以及 (2) 数据——如何存储在文件中是特定于实现的,因此在尝试解码任何内容之前,您首先需要该规范。

希望这可以帮助。

于 2011-07-05T01:20:11.320 回答
-1

我不清楚您所说的“不起作用”是什么意思,但可能是您需要另辟蹊径。

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

和以前一样。

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

于 2011-07-04T22:25:18.660 回答