3

zlibで圧縮された(収縮された)データを含むベクトルがあります。Boostで解凍したいのですがfiltering_istream。彼らのサイトには、データのストリームを操作する例が1つだけあります(私が持っているベクトルとは対照的です)。

vector<char> compressed_buffer;
compressed_buffer.resize(cdh.length);
file.read(&compressed_buffer[0], cdh.length);

filtering_istream in;
in.push(zlib_decompressor());
in.push(something(compressed_data)); // what should "something" be?

非圧縮データもベクトルとして取得したいと思います。これどうやってするの?

4

2 に答える 2

4

どうarray_sourceですか?

in.push(array_source(&*compressed_data.begin(), &*compressed_data.end()));

次に、を使用boost::iostreams::copyしてstd::insert_iterator、結果の文字を新しいベクトルにプッシュします。

于 2012-03-04T18:45:45.087 に答える
0

受け入れられた回答は&*compressed_data.end()、過去のイテレータを逆参照しているため、どちらが未定義の動作であるかを示しています。それは偶然にのみ機能します。正解は、andの代わりにandを使用する必要data()data() + size()ありbegin()ますend()

in.push(array_source(compressed_data.data(), compressed_data.data() + compressed_data.size()));
于 2021-10-20T08:18:34.970 に答える