zlib在内存中膨胀

时间:2011-10-10 10:17:29

标签: c zlib

我有一个带有一些数据的小缓冲区(大约35'000字节)。 不,我想用zlib充气我的缓冲区。 缓冲区名为“pos_in_mem”(void *),缓冲区长度为len(int *)。

我总是在代码的那一部分得到-3(Z_DATA_ERROR):

int ret;
z_stream strm;
unsigned char in[CHUNK];
unsigned char out[CHUNK];

/* allocate deflate state */
strm.zalloc = Z_NULL;
strm.zfree = Z_NULL;
strm.opaque = Z_NULL;
strm.avail_in = 0;
strm.next_in = Z_NULL;
ret = inflateInit(&strm);
if (ret != Z_OK) {
    printf("zlib init failed");
}
strm.avail_in = *len; // this is my buffer length
strm.next_in = pos_in_mem; // this is my buffer

strm.avail_out = CHUNK;
strm.next_out = out;

//ret = deflate(&strm, flush);
ret = inflate(&strm, Z_NO_FLUSH); // here i always get a -3 Z_DATA_ERROR
printf("%d", strm.avail_out);
(void)inflateEnd(&strm);

任何想法?

由于

2 个答案:

答案 0 :(得分:2)

您可能误将inflate误认为deflate

inflate - 通货膨胀,数量增加,减压

deflate - 通货紧缩,减少量,压缩

zlib web page上的好deflate / inflate个例子。

答案 1 :(得分:1)

您的数据可能不是预期的格式(原始?)

您可以尝试inflateInit2(&strm, X)

  • X = -15进行原始充气。
  • X = 15 + 32进行gzip / zlib自动格式解码。
  • X = 15会像以前一样。

除此之外,如果没有看到缩减代码就很难说。