2011-09-16 36 views
4

我壓縮了文本「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個字符,但我無法弄清楚它是如何在剩餘的位。我究竟做錯了什麼?

+0

你能給碼錶? (包括len0和len1代碼) 或者,您選擇了「靜態樹」選項? – harold

+0

該表在3.2.5節[這裏](http://tools.ietf.org/html/rfc1951#page-12) – ItsJustMe

+0

好吧,我不得不去檢查一下,它經常發生,其他一些靜態huffman樹是使用(不幸)。 10000100是另一個T,0000100 = len = 6 00101 = dist = 5然後事情出錯 – harold

回答

4

距離代碼是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 
+0

不錯,我忘了額外的位,現在有意義 – harold

+0

感謝您的幫助! – ItsJustMe