我想用固定的霍夫曼代码编写用于deflate压缩数据的解压缩器。 形成规范:
BTYPE specifies how the data are compressed, as follows: 00 - no compression 01 - compressed with fixed Huffman codes 10 - compressed with dynamic Huffman codes 11 - reserved (error) The only difference between the two compressed cases is how the Huffman codes for the literal/length and distance alphabets are defined.
我希望解压缩程序在BTYPE = 01时解压缩数据 我知道我必须首先解码霍夫曼代码然后解压缩lz77 但是当BTYPE = 01时,Huffman树不会与压缩数据一起存储
那么如何在没有树的情况下解码霍夫曼代码呢?
编辑:
所以霍夫曼代码将是这样的:
0 110000
1 110001
2 110010
144 110010000
145 110010001
255 111111111
256 0
257 1
258 10
259 11
260 100
279 10111
280 11000000
287 11000111
我没有得到的是,如果我遇到代码 10 我如何区分距离代码值 2 和值 258 < / strong>,因为值 0-23 和 256-297 具有相同的代码
答案 0 :(得分:1)
固定的霍夫曼码是预先定义的。来自RFC 1951:
3.2.6. Compression with fixed Huffman codes (BTYPE=01)
The Huffman codes for the two alphabets are fixed, and are not
represented explicitly in the data. The Huffman code lengths
for the literal/length alphabet are:
Lit Value Bits Codes
--------- ---- -----
0 - 143 8 00110000 through
10111111
144 - 255 9 110010000 through
111111111
256 - 279 7 0000000 through
0010111
280 - 287 8 11000000 through
11000111
The code lengths are sufficient to generate the actual codes,
as described above; we show the codes in the table for added
clarity. Literal/length values 286-287 will never actually
occur in the compressed data, but participate in the code
construction.
Distance codes 0-31 are represented by (fixed-length) 5-bit
codes, with possible additional bits as shown in the table
shown in Paragraph 3.2.5, above. Note that distance codes 30-
31 will never actually occur in the compressed data.