zlib压缩中uncompress函数返回Z_DATA_ERROR错误!!!

int uncompress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen);

函数说明:
uncompress 函数将 source 缓冲区的内容解压缩到 dest 缓冲区。sourceLen  source 缓冲区的大小(以字节计)。注意函数的第二个参数 destLen 是传址调用。当调用函数时,destLen 表示 dest 缓冲区的大小, dest 缓冲区要足以容下解压后的数据。在进行解压缩时,需要提前知道被压缩的数据解压出来会有多大。这就要求在进行压缩之前,保存原始数据的大小(也就是解压后的数据的大小)。这不是 zlib 函数库的功能,需要我们做额外的工作。当函数退出后, destLen 是解压出来的数据的实际大小。

uncompress 若成功,则返回 Z_OK ;若没有足够内存,则返回 Z_MEM_ERROR;若输出缓冲区不够大,则返回 Z_BUF_ERROR。若输入数据有误,则返回Z_DATA_ERROR


出现Z_BUF_ERROR错误的原因:

dest 缓冲区大小不够。

dest 缓冲区大小由第二个参数destLen带入,如果类型不是uLongf,可能会因类型不同而出现类型转换,导致uncompress得到的值变小,从而也出现Z_BUF_ERROR错误。

猜你喜欢

转载自blog.csdn.net/guo0625/article/details/12107217