gpt4 book ai didi

c++ - 使用 Boost gzip_decompressor 解压缩内存中的数据

转载 作者:搜寻专家 更新时间:2023-10-31 01:49:21 28 4
gpt4 key购买 nike

我正在尝试使用 Boost gzip_decompressor 解压缩内存中的二进制数据。来自 this answer ,我改编了以下代码:

vector<char> unzip(const vector<char> compressed)
{
vector<char> decompressed = vector<char>();

boost::iostreams::filtering_ostream os;

os.push(boost::iostreams::gzip_decompressor());
os.push(boost::iostreams::back_inserter(decompressed));

boost::iostreams::write(os, &compressed[0], compressed.size());

return decompressed;
}

但是,返回的 vector 长度为​​零。我究竟做错了什么?我尝试在 os 流上调用 flush(),但没有任何区别

最佳答案

您的代码适用于这个简单的测试程序:

#include <iostream>
#include <vector>
#include <boost/iostreams/filtering_stream.hpp>
#include <boost/iostreams/filter/gzip.hpp>

std::vector<char> unzip(const std::vector<char> compressed)
{
std::vector<char> decompressed = std::vector<char>();

boost::iostreams::filtering_ostream os;

os.push(boost::iostreams::gzip_decompressor());
os.push(boost::iostreams::back_inserter(decompressed));

boost::iostreams::write(os, &compressed[0], compressed.size());

return decompressed;
}

int main() {
std::vector<char> compressed;
{
boost::iostreams::filtering_ostream os;
os.push(boost::iostreams::gzip_compressor());
os.push(boost::iostreams::back_inserter(compressed));
os << "hello\n";
os.reset();
}
std::cout << "Compressed size: " << compressed.size() << '\n';

const std::vector<char> decompressed = unzip(compressed);
std::cout << std::string(decompressed.begin(), decompressed.end());

return 0;
}

您确定您的输入是使用 gzip 而不是其他方法(例如原始压缩)压缩的吗? gzip 压缩数据以字节 1f 8b 开头。

我一般用reset()或者将流和过滤器放在它们自己的 block 中以确保输出完整。我在上面都做了压缩,只是作为一个例子。

关于c++ - 使用 Boost gzip_decompressor 解压缩内存中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16682719/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com