2011-09-16 16 views
4

"TestingTesting"というテキストが圧縮され、16進数の結果は0B 49 2D 2E C9 CC 4B 0F 81 50 00でした。長さと距離のコードは分かりません。下のバイナリは、RFCがビットを右から左に読み出すように指示されているため、逆になりました(ヘルプはMatthew Slatteryに感謝します)。ここでは、これまでに解析されたものです。deflateアルゴリズムの長さの値

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 

はこれらは私が解析する方法がわからない残りのビットです:最後の10ビット

1000 0100 0000 1000 0101 0000 0000 0 

(ブロック値の末尾が100倍である)されます私が解析できる唯一の部分です。私は、 "Testing"の長さが7文字で、長さと距離の値が7(2進数0111)でなければならないと思います。現在の位置の後に7文字をコピーしますが、残っている部分ビット。私は間違って何をしていますか?

+0

あなたはコード表を与えることができますか? (len0とlen1コードを含む) あるいは、 "静的ツリー"のどちらを選択しましたか? – harold

+0

テーブルはセクション3.2.5にあります[こちら](http://tools.ietf.org/html/rfc1951#page-12) – ItsJustMe

+0

さて、私はチェックしなければなりませんでした。使用された(残念ながら)。 10000100は他のTです、0000100 = len = 6 00101 = dist = 5そして、物事が間違っています – harold

答えて

4

距離コードは5ですが、距離コード5の後に実際の距離7または8を示す1つの「余分なビット」が続きます(RFCの3.2.5節の2番目の表を参照) 。)

データの完全解読がある:

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

関連する問題