119

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

zlib を使用して gzip ファイルを解凍するにはどうすればよいですか?

4

3 に答える 3

128

gzip 形式のファイルを zlib で解凍するには、次のようにas パラメーターを指定してinflateInit2呼び出します。windowBits16+MAX_WBITS

inflateInit2(&stream, 16+MAX_WBITS);

これを行わないと、zlib はストリーム形式が悪いと文句を言うでしょう。デフォルトでは、zlib は zlib ヘッダーを使用してストリームを作成し、inflate は、指定しない限り異なる gzip ヘッダーを認識しません。zlib.hこれはヘッダー ファイルのバージョン 1.2.1 から文書化されていますが、 zlib のマニュアルには記載されていません。ヘッダー ファイルから:

windowBitsオプションの gzip デコードの場合は、15 を超えることもできます。自動ヘッダー検出による zlib および gzip デコードを有効にするにはに 32 を追加windowBitsするか、gzip 形式のみをデコードするには 16 を追加します (zlib 形式は を返しますZ_DATA_ERROR)。gzip ストリームがデコードされている場合strm->adlerは、adler32 ではなく crc32 です。

于 2009-12-03T09:20:26.920 に答える
4

zlib と gzip の構造は異なります。zlib はRFC 1950を使用し、gzip はRFC 1952を使用するため、ヘッダーは異なりますが、残りは同じ構造を持ち、RFC 1951に従います。

于 2013-05-02T16:36:58.460 に答える