злиб раздувать в памяти - PullRequest
1 голос
/ 10 октября 2011

У меня есть небольшой буфер с некоторыми данными (около 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 ]

2 голосов
/ 10 октября 2011

Вы, вероятно, ошиблись inflate с deflate.

inflate - инфляция, увеличение объема, декомпрессия

deflate - дефляция, уменьшение объема, сжатие

Хорошо deflate / inflate примеров на веб-странице zlib .

1 голос
/ 10 октября 2011

Возможно, ваши данные не в ожидаемом формате (необработанные?)

Вы можете попробовать inflateInit2(&strm, X):

  • X = -15, чтобы сделать необработанный раздувание.
  • X = 15 + 32 для декодирования в автоматическом формате gzip / zlib.
  • X = 15 будет делать то же самое, что и раньше.

За исключением этого, трудно сказатьне видя код выкачки.

...