5

我压缩了文本“TestingTesting”,十六进制结果是:0B 49 2D 2E C9 CC 4B 0F 81 50 00。我不知道长度和距离代码。下面的二进制文件是相反的,因为RFC说要从右到左读取位(感谢 Matthew Slattery 的帮助)。这是到目前为止解析的内容:

1                       BFINAL (last block)
01                      BTYPE (static)
1000 0100   132-48=  84 T
1001 0101   149-48= 101 e
1010 0011   163-48= 115 s
1010 0100   164-48= 116 t
1001 1001   153-48= 105 i
1001 1110   158-48= 110 n
1001 0111   151-48= 103 g

这些是我不知道如何解析的剩余位:

1000 0100 0000 1000 0101 0000 0000 0

最后的 10 位(块的结尾是 x100)是我唯一可以解析的部分。我认为长度和距离值应该是 7(二进制 0111),因为“测试”的长度是 7 个字母,并且它在当前位置之后被复制了 7 个字符,但我无法弄清楚它是如何在剩余的位。我究竟做错了什么?

4

1 回答 1

5

距离代码为 5,但距离代码 5 后跟一个“额外位”以指示实际距离为 7 或 8。(请参阅 RFC 的第 3.2.5 段中的第二个表。)

数据的完整解码为:

1          BFINAL
01         BTYPE=static
10000100  'T'
10010101  'e'
10100011  's'
10100100  't'
10011001  'i'
10011110  'n'
10010111  'g'
10000100  another 'T'
0000100   literal/length code 260 = length 6
00101     distance code 5
0         extra bit  => the distance is 7
0000000   literal/length code 256 = end of block
于 2011-09-16T20:39:51.520 回答