vb.netのgzipstreamで圧縮されたバイト配列を解凍するために使用する必要がある関数を誰かに教えてもらえますか?zlibを使いたいのですが。
zlib.hを含めましたが、使用する関数がわかりません。
vb.netのgzipstreamで圧縮されたバイト配列を解凍するために使用する必要がある関数を誰かに教えてもらえますか?zlibを使いたいのですが。
zlib.hを含めましたが、使用する関数がわかりません。
The Boost Iostreams Libraryを見ることができます:
#include <fstream>
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/filter/gzip.hpp>
std::ifstream file;
file.exceptions(std::ios::failbit | std::ios::badbit);
file.open(filename, std::ios_base::in | std::ios_base::binary);
boost::iostreams::filtering_stream<boost::iostreams::input> decompressor;
decompressor.push(boost::iostreams::gzip_decompressor());
decompressor.push(file);
次に、1 行ずつ解凍します。
for(std::string line; getline(decompressor, line);) {
// decompressed a line
}
またはファイル全体を配列に:
std::vector<char> data(
std::istreambuf_iterator<char>(decompressor)
, std::istreambuf_iterator<char>()
);
inflateInit2()
gzip デコードをリクエストするには、 を使用する必要があります。zlib.hのドキュメントを読んでください。
zlib ディストリビューションには多くのサンプル コードがあります。また、zlib の使用法について詳しく説明されているこの例も参照してください。inflateInit2()
の代わりに使用するように変更できますinflateInit()
。
zlib の使用例をご覧ください。http://www.zlib.net/zpipe.c
実際の作業を行う関数は inflate() ですが、inflateInit() などが必要です。