zlib раздувается в памяти

#c #zlib

#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(amp;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(amp;strm, flush);
ret = inflate(amp;strm, Z_NO_FLUSH); // here i always get a -3 Z_DATA_ERROR
printf("%d", strm.avail_out);
(void)inflateEnd(amp;strm);
  

есть идеи?

Спасибо

Ответ №1:

Вы, вероятно inflate , перепутали deflate с.

inflate — раздувание, увеличение объема, распаковка

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

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

Ответ №2:

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

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

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

Кроме этого, трудно сказать, не видя кода deflate.

Комментарии:

1. Это решило проблему, с которой я столкнулся, используя библиотеку zlib. Спасибо!