zlib.h имеет API для распаковки / сжатия буферов данных в памяти, inflateInit2 () позволяет добавить 16 к рекомендованному значению windowBits 15, чтобы распаковать сжатые буферы данных.К сожалению, нет API для считывания ожидаемого количества распакованных байтов из 8-байтового трейлера gzip (4-байтовый CRC Fletcher-32, 4-байтовый размер распакованных данных в байтах).Насколько я могу сказать, вы должны сделать это сами или сделать предположение, а затем изменить размер выходного буфера, если inflate () вернется с Z_BUF_ERROR (недостаточно места в переданном выходном буфере).Если у вас есть весь входной буфер в памяти, используйте флаг сброса Z_FINISH для накачки ().Если у вас достаточно выходной памяти, он вернет Z_STREAM_END, если нет, вернет Z_BUF_ERROR, и вы можете перераспределить ваш выходной буфер и продолжить.