如何使用霍夫曼代码压缩文件
How to Use Huffman code for compress file?
我的程序将霍夫曼代码存储在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位信息。
相关文章:
- 浏览压缩文件与游览解压缩它们
- 如何在视觉工作室中使用C++解压缩压缩文件 (.zip)
- 霍夫曼解码压缩文件
- 如何以非阻塞方式压缩文件
- 从本地代码访问apk中的压缩文件(从zip中读取zip)
- 如何将多个协议缓冲区的消息写入可附加的压缩文件中?
- 使用结构 c++ 读取压缩文件 Gzread
- 使用Qt qUnCompress功能解压缩文件
- 如何将二进制数据写入压缩文件
- 使用boost iostreams将数组读写到压缩文件中
- 压缩和解压缩文件 C++
- 在C++中,如何在使用gzstream编写压缩文件时检查错误
- 对解压缩文件(popen)的权限被拒绝
- 无法打开压缩文件
- Qt-包括DLL和压缩文件
- 如何检查 zip 文件或压缩文件是否存在
- 如何压缩文件夹使用 lzma sdk
- 在霍夫曼压缩后将代码表存储在压缩文件中,并从此表构建用于解压缩的树
- c++中的压缩文件IO
- 通过套接字发送和接收压缩文件