2011-10-10 53 views
1

我有一些小数据缓冲区(大约35'000字节)。不,我想用zlib充气我的缓冲区。 缓冲区被命名为“pos_in_mem”(void *),缓冲区的长度为len(int *)。zlib在内存中膨胀

我总是得到的代码部分-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

您可能误认为inflatedeflate

inflate - 通货膨胀,体积的上升,解压缩

deflate - 放气,体积的减少,压缩上zlib web page

良好deflate/inflate例子。

+0

对!我混淆了东西!谢谢。 –

1

也许你的数据不是预期的格式(生?)

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

  • X = -15做原料充气。
  • X = 15 + 32做一个gzip/zlib自动格式解码。
  • X = 15会和以前一样。

除此之外,很难说没有看到deflate代码。

+0

这解决了我使用zlib库时遇到的问题。谢谢! –