【发布时间】:2013-06-24 21:54:34
【问题描述】:
我正在尝试使用 zlib 解压缩(膨胀)一些通过 gzip 压缩的 IP 数据包负载数据。但是,我很难理解 zlib 提供的一些涵盖通货膨胀的文档。我有一个我的程序填充的 char 数组,但我似乎无法使用以下代码对其进行扩充:
const u_char payload; /*contains gzip data,
captured prior to this point in the program*/
/*read compressed contents*/
int ret; //return val
z_stream stream;
unsigned char out[MEM_CHUNK]; //output array, MEM_CHUNK defined as 65535
/* allocate inflate state */
stream.zalloc = Z_NULL;
stream.zfree = Z_NULL;
stream.opaque = Z_NULL;
stream.avail_in = size_payload; // size of input
stream.next_in = (Bytef *)payload; // input char array
stream.avail_out = (uInt)sizeof(out); // size of output
stream.next_out = (Bytef *)out; // output char array
ret = inflateInit(&stream);
inflate(&stream, Z_NO_FLUSH);
inflateEnd(&stream);
printf("Inflate: %s\n\n", out);
在zlib documentation 中,它们通过do/while 循环不断调用inflate,检查Z_STREAM_END 标志。我在这里有点困惑,因为似乎他们正在处理文件,而我却没有。我是否也需要这个循环,还是我能够提供一个 char 数组而不循环 inflate?
这里的任何指导将不胜感激。我对使用压缩和 C++ 都很陌生。
谢谢。
【问题讨论】:
-
我立即看到的最明显的错误是
payload、const u_char、Bytef*的演员表指针 类型。我认为这注定是一个核心转储。还是应该是一个数组或一些动态分配的数据缓冲区? -
编辑:@WhozCraig 我对它的理解是它应该是一个动态数据数组,但我不完全确定,我正在使用一些 sample code 来实现它.