0
我发现这个类使标题状态。 但它总是抱怨段错误。 有人可以帮我调试吗? 问候在Qt中解压缩Gzip网络流
gzipDecompress(QByteArray &compressData)
{
//decompress GZIP data
//strip header and trailer
compressData.remove(0, 10);
compressData.chop(12);
const int buffersize = 16384;
quint8 buffer[buffersize];
z_stream cmpr_stream;
cmpr_stream.next_in = (unsigned char *)compressData.data();
cmpr_stream.avail_in = compressData.size();
cmpr_stream.total_in = 0;
cmpr_stream.next_out = buffer;
cmpr_stream.avail_out = buffersize;
cmpr_stream.total_out = 0;
cmpr_stream.zalloc = Z_NULL;
cmpr_stream.zalloc = Z_NULL;
if(inflateInit2(&cmpr_stream, -8) != Z_OK) {
qDebug() << "cmpr_stream error!";
}
QByteArray uncompressed;
do {
qDebug()<<"decompress................"<<uncompressed.size();
int status = inflate(&cmpr_stream, Z_SYNC_FLUSH);
if(status == Z_OK || status == Z_STREAM_END) {
uncompressed.append(QByteArray::fromRawData(
(char *)buffer,
buffersize - cmpr_stream.avail_out));
cmpr_stream.next_out = buffer;
cmpr_stream.avail_out = buffersize;
} else {
inflateEnd(&cmpr_stream);
}
if(status == Z_STREAM_END) {
inflateEnd(&cmpr_stream);
break;
}
}while(cmpr_stream.avail_out == 0);
return uncompressed;
}
是的,并没有工作,有时它触发段错误。 – giuseppe
qUncompress仅解压缩zlib数据,而不是gzip。格式大多相同,但是它们具有不同的标题。 – PAG