2017-02-28 3 views
0

私は(私が知っている、IDC、ホイール何とか何とか何とかを改革していない)私自身のPNGライブラリのための私自身のInflaterを実装するためにzlib/RFC1950のFCHECKはどのように機能しますか?

をしようとしていると私は本当に、動作するようになっています方法を理解するのに苦労しています明らかに、それは31の倍数(5ビットで、常に31です)であると思われます。さらに、最下位ビットから最も重要なビットまで読み込むはずです。これは、これまでに見た他のすべてのフォーマットこれはいくらか混乱を招いている。

私はZlibのソースコードを読んでみましたが、基本的には判読できませんでした。また、RFCは "チェックコード"に関するものではありません(明らかにzlibヘッダの2番目のバイト、またはiDAT/fDATチャックデータセクションの2番目のバイト)。

私の質問です。どのように私はそれを読むのですか、どのように私はそれを確認するのですか、私はそれをどうしますか?

編集:チェックコードもRFCにはFCheckと呼ばれる1950

答えて

1

RFC 1950はヘッダーを確認する方法を正確かつ簡潔に述べています。

はFCheck値は、MSBの順(CMF * 256 + FLG)に格納されている 16ビットの符号なし整数として見CMFとFLGは、31

の倍数であるようなものでなければなりません

CMFはストリームの最初のバイトで、FLGは2番目のバイトです。だから私は何を言うことができますか?最初のバイトを取り出し、256を掛けて2番目のバイトを追加します。その数が31の倍数でない場合、ヘッダーは無効です。

数字が31で割り切れるかどうかを確認する方法は分かりませんか?

+0

2バイトブロック全体を31で、5ビットセクションだけでなくモジュロにし、2バイトブロックの値をとって5ビットセクションを生成し、Xを加えて31の倍数にします。 私は今、それを得る、ありがとう。 – MarcusJ

関連する問題