【发布时间】:2018-11-04 19:07:27
【问题描述】:
这个问题是关于RFC-1951 的第 3.2.7 节,重建动态 Huffman 树。
每个代码都由一系列代码长度定义,因此给定位长度的所有代码都具有字典顺序上的连续值。
例如,这是一个 rgb(255,0,0) 50x50 png,其中 IDAT 是来自 DEFLATE 的动态 Huffman 树。
0000024: xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx CIDATx
000002a: xxxxxxxx 11101101 11001111 00110001 00010001 00000000 ...1..
0000030: 00000000 00001000 00000000 10100001 11101111 01011111 ....._
0000036: 01011010 00110011 10111000 01111010 00001100 00000100 Z3.z..
000003c: 10100000 10101001 11111001 00100000 00010001 00010001 ... ..
0000042: 00010001 00010001 00010001 00010001 00010001 00010001 ......
0000048: 00010001 00010001 00010001 00010001 00010001 00010001 ......
000004e: 00010001 00010001 00010001 00010001 00010001 00010001 ......
0000054: 00010001 00010001 00010001 00010001 00010001 00010001 ......
000005a: 00010001 00010001 00010001 00010001 00010001 00010001 ......
0000060: 00010001 00010001 00010001 00010001 00010001 10010001 ......
0000066: 10001011 00000101 10110000 00110011 01110101 10010110 ...3u.
000006c: 01111001 11000101 00011100 10110001 00000000 00000000 y.....
0000072: 00000000 00000000 01001001 01000101 01001110 01000100 ..
infgen 生成此标头:
last
dynamic
litlen 0 2
litlen 255 4
litlen 256 4
litlen 274 4
litlen 283 4
litlen 285 1
dist 3 1
dist 15 1
...目标是了解重建动态树的位和过程...
前三位描述了 DEFLATE 标头。
101 <- last block bit, tree type is dynamic.
接下来的 14 位描述 HLIT、HDIST 和 HCLEN。
11101 <- HLIT, 29 + 257 = 286
01111 <- HDIST, 15 + 1 = 16
1110 <- HCLEAN, 14 + 4 = 18
这些值对动态 Huffman 树的描述是什么?
接下来,一次读取三个位,并按照排列表……发现长度是……
Lengths: [4, 2, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2](puff.c 的第 697 行)
这些长度是用来定义文字的吗?
【问题讨论】:
标签: huffman-code deflate