Этот вопрос относится к разделу 3.2.7 RFC-1951 о восстановлении динамического дерева Хаффмана.
Каждый код определяется последовательностью длин кодов, так что все коды с заданной длиной битов имеют лексикографически последовательные значения.
Например, вот rgb (255,0,0) 50x50 png, где IDAT - это динамическое дерево Хаффмана из DEFLATE.
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.
Следующие четырнадцать битов описывают HLIT, HDIST и HCLEN.
11101 <- HLIT, 29 + 257 = 286
01111 <- HDIST, 15 + 1 = 16
1110 <- HCLEAN, 14 + 4 = 18
Что эти значения описывают в динамическом дереве Хаффмана?
Затем, читая три бита за раз и следуя таблице перестановок ... длина оказывается равной ...
Lengths: [4, 2, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2]
(строка 697 puff.c )
Используются ли эти длины для определения литералов?