2017-05-22 3 views
-1

gzipフッターを私のために出力するにはどうすればよいですか? 私は現在自分でやっていますが、zlibが私のためにやってくれればいいと思います。zlibにgzipフッターを出力させるにはどうしたらいいですか?

shared_data xcc_z::gzip(data_ref s) 
{ 
    z_stream stream; 
    stream.zalloc = NULL; 
    stream.zfree = NULL; 
    stream.opaque = NULL; 
    if (deflateInit2(&stream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, 16 + MAX_WBITS, MAX_MEM_LEVEL, Z_DEFAULT_STRATEGY)) 
    { 
    assert(false); 
    return {}; 
    } 
    shared_data d(deflateBound(&stream, s.size()) + 8); 
    stream.next_in = const_cast<unsigned char*>(s.data()); 
    stream.avail_in = s.size(); 
    stream.next_out = d.data(); 
    stream.avail_out = d.size() - 8; 
    deflate(&stream, Z_FINISH); 
    deflateEnd(&stream); 
    unsigned char* w = stream.next_out; 
    w = write_int_le(4, w, crc32(crc32(0, NULL, 0), s.data(), s.size())); 
    w = write_int_le(4, w, s.size()); 
    return d.substr(0, w - d.data()); 
} 

答えて

1

なぜそうは思わないのですか?あなたのコードはすでにzlibによって書かれたものの後に無用な2番目の予告編を追加します。

+0

私の悪い、私はどういうわけかそれはヘッダーを行うだけだと思った。ヘッダーを自分で作成する前に、+16の機能が追加された時期はわかりません。ところで、関連のない問題について@ [email protected]にメールしましたが、そのアドレスは正しいですか? 16の名前付き定数を持つこともいいかもしれません。 – XTF

関連する問題