RFC1951说">5位:HLIT,文字/长度代码的#-257(257-286(";以及">HLIT+257个使用代码长度霍夫曼代码编码的文字/长度字母表的代码长度;。
因此,文字和长度使用相同的字母表,距离使用各自不同的字母表。
文字介于0-255之间是有道理的。块的末尾字符是256,不能用8位字节表示,由于257到286之间的任何字符都不能用一个字节表示,因此得出该范围内的任何代码都是长度代码的结论似乎不无道理?
还有长度代码所代表的实际长度的问题。在我正在看的例子中,看起来你可以通过减去254从长度代码(259(中确定实际长度(5(。我可以只取长度代码并从中减去254,但我猜可能存在这种方法不起作用的长度代码?
是。来自RFC:
Extra Extra Extra
Code Bits Length(s) Code Bits Lengths Code Bits Length(s)
---- ---- ------ ---- ---- ------- ---- ---- -------
257 0 3 267 1 15,16 277 4 67-82
258 0 4 268 1 17,18 278 4 83-98
259 0 5 269 2 19-22 279 4 99-114
260 0 6 270 2 23-26 280 4 115-130
261 0 7 271 2 27-30 281 5 131-162
262 0 8 272 2 31-34 282 5 163-194
263 0 9 273 3 35-42 283 5 195-226
264 0 10 274 3 43-50 284 5 227-257
265 1 11,12 275 3 51-58 285 0 258
266 1 13,14 276 3 59-66