我的程序将霍夫曼代码存储在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;
}
答案 0 :(得分:3)
这一行怎么样:
if ( bits[k] == '1' )
bits
数组是否将您的位存储为ASCII字符或数字值,即如果您尝试将会发生什么
if ( bits[k] == 0x01 )
你可能会因为无法读懂你的想法而向我投降......
答案 1 :(得分:0)
Huffman是一种压缩方案,如果你想读取一个霍夫曼编码文件,你最想解码它(即解压缩它)
http://en.wikipedia.org/wiki/Huffman_coding
在霍夫曼编码数据中,每个字符都表示为可变数量的位,因此您无法通过简单地传入文件的固定部分来处理文件,期望在每次调用中返回单个字节 - 您必须保持每次调用消耗多少位的状态,以及在比特流中开始处理以提取下一个字节的位置。
要正确解码霍夫曼数据,您需要编码树(请参阅维基百科链接) - 此树很可能也存储在文件中 - 所以您的文件实际上很可能有两部分:(1)编码/解码树,以及(2)数据 - 如何存储在文件中是特定于实现的,因此在尝试解码任何内容之前,您需要先了解规范。
希望这有帮助。
答案 2 :(得分:-1)
我不清楚你的意思是“不起作用”,但可能你需要走另一条路。
for (int k = 7; k >= 0; k--) {
以及其他所有事情。
当然,我也不知道为什么你用8个字节只存储8位信息。