zlib的uncompress函数出现Z_BUF_ERROR的原因

来源:互联网 发布:淘宝客导购名填手机号 编辑:程序博客网 时间:2024/05/17 23:12
函数原型:
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

在已知解压后数据大小的情况下,直接赋值destLen为解压后的数据大小;若不知道解压后的数据大小,则destLen应该足够大!


出现Z_BUF_ERROR错误的原因:

dest 缓冲区大小不够。

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

原创粉丝点击