1. ホーム
  2. gzip

[解決済み] zlib で gzip ストリームを伸長するには?

2022-08-21 05:58:47

質問

Gzip 形式のファイル ( gzip プログラムで作成されたもの) は "deflate" 圧縮アルゴリズムを使用します。 zlib が使用しているものと同じ圧縮アルゴリズムです。しかし、zlib を使って gzip 圧縮されたファイルを膨張させるとき、ライブラリは Z_DATA_ERROR .

zlib を使って gzip ファイルを解凍するにはどうしたらよいでしょうか。

どのように解決するのですか?

gzip 形式のファイルを zlib で伸長するためには inflateInit2 と共に windowBits というパラメータを 16+MAX_WBITS のような、このようなものです。

inflateInit2(&stream, 16+MAX_WBITS);

これを行わないと、zlib は不正なストリーム形式であると文句を言います。デフォルトでは、zlib は zlib ヘッダを持つストリームを作成し、 inflate では、あなたがそう指示しない限り、異なる gzip ヘッダを認識しません。このことは、バージョン 1.2.1 以降の zlib.h ヘッダファイルのバージョン 1.2.1 から文書化されていますが zlib マニュアル . ヘッダーファイルから

windowBits は、オプションの gzip デコードのために 15 よりも大きくすることができます。追加 に 32 を加えます。 windowBits に 32 を追加すると、自動ヘッダ検出による zlib と gzip のデコードが可能になります。 または 16 を追加して gzip フォーマットのみをデコードします (zlib フォーマットは を返します)。 Z_DATA_ERROR ). gzip ストリームがデコードされる場合。 strm->adler は は adler32 ではなく crc32 になります。