我正在尝试使用 zlib 的 inflate 来解压缩从 http 数据包收到的一些数据。
数据包如下:
数据包本身说它是用 gzip 编码的,所以我认为它应该可以工作。但是,当我通过 inflate 函数运行数据时,我得到“无效的块类型”。需要明确的是,我只是将数据包的突出显示部分传递给 inflate 函数。我错过了什么?
这是我用来解压缩数据的代码:
int Decompress(const u_char* strStreamIn, int nStreamInLen, u_char* strStreamOut)
{
int ret = -1;
int err = -1;
z_stream strm = {0};
strm.total_in = strm.avail_in = nStreamInLen;
strm.total_out = strm.avail_out = nStreamInLen * 6;
strm.next_in = (Bytef*) strStreamIn;
strm.next_out = (Bytef*) strStreamOut;
strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
strm.opaque = Z_NULL;
err = inflateInit2(&strm, -MAX_WBITS);
if (err == Z_OK) {
err = inflate(&strm, Z_FINISH);
if (err == Z_STREAM_END) {
ret = strm.total_out;
}
else {
inflateEnd(&strm);
return err;
}
}
else {
inflateEnd(&strm);
return err;
}
inflateEnd(&strm);
return ret;
}