微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ZLIB 膨胀流标头格式

如何解决ZLIB 膨胀流标头格式

下载 ZLIB 版本后。 1.2.11 并查看 RFC1951 我正在尝试像这样使用 ZLIB.inflate 函数

#include "zlib.h"

int irslt;
unsigned char buffIn[4]={0x4b,4,0};
unsigned char buffOut[16];
z_stream zStrm;

  memset(&zStrm,sizeof(zStrm));
  zStrm.zalloc = Z_NULL;
  zStrm.zfree = Z_NULL;
  zStrm.opaque = Z_NULL;
  zStrm.avail_in = 0;
  zStrm.next_in = Z_NULL;
  irslt = inflateInit(&zStrm);
  if(irslt != Z_OK) return;

  zStrm.avail_in = sizeof(buffIn);
  zStrm.next_in = buffIn;
  zStrm.avail_out = sizeof(buffOut);
  zStrm.next_out = buffOut;
  irslt = inflate(&zStrm,Z_NO_FLUSH);
  if(irslt == Z_DATA_ERROR){//-3
    //why do I end up here with zStrm.msg -> "incorrect header check"?
  }

我的 buffIn 包含比特流头 011b:BFINAL=1; BTYPE=01b;并修复了字符“a”(0x61)的霍夫曼代码,后跟至少 7 个零位以结束块。显然这还不够。请帮忙。 提前谢谢了; 波巴。

解决方法

您的代码正在寻找 RFC 1950 中定义的 zlib 流标头。它没有找到。该 RFC 定义了包裹在原始 deflate 流中的 zlib 头和尾。

您的问题中有一个原始的 deflate 流。要解码它而不是 zlib 流,您需要使用 inflateInit2()windowBits-15 值。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。