2011-10-10 56 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庫時遇到的問題。謝謝! –