Gzip 形式のファイル (たとえば、プログラムで作成されたもの) は、 zlibgzip
が使用するものと同じ圧縮アルゴリズムである "deflate" 圧縮アルゴリズムを使用します。ただし、zlib を使用して gzip 圧縮ファイルを膨張させると、ライブラリは.Z_DATA_ERROR
zlib を使用して gzip ファイルを解凍するにはどうすればよいですか?
gzip 形式のファイルを zlib で解凍するには、次のようにas パラメーターを指定してinflateInit2
呼び出します。windowBits
16+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 です。