ZLIB 膨胀流 header 格式
ZLIB inflate stream header format
下载 ZLIB 版本后。 1.2.11 并查看 RFC1951
我正在尝试使用 ZLIB.inflate 函数,如下所示:
#include "zlib.h"
int iRslt;
unsigned char buffIn[4]={0x4b,4,0,0};
unsigned char buffOut[16];
z_stream zStrm;
memset(&zStrm, 0, 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 包含比特流 header 011b: BFINAL=1; BTYPE=01b;并修复了字符 'a' (0x61) 的霍夫曼代码,后跟至少 7 个零位以结束该块。显然这还不够;请帮忙。
提前谢谢了;
波巴.
您的代码正在寻找 zlib 流 header,如 RFC 1950 中所定义。它没有找到它。该 RFC 定义了 zlib header 和包裹在原始 deflate 流周围的预告片。
你的问题中有原始压缩流。要解码它而不是 zlib 流,您需要使用 inflateInit2()
,windowBits
值为 -15
。
下载 ZLIB 版本后。 1.2.11 并查看 RFC1951 我正在尝试使用 ZLIB.inflate 函数,如下所示:
#include "zlib.h"
int iRslt;
unsigned char buffIn[4]={0x4b,4,0,0};
unsigned char buffOut[16];
z_stream zStrm;
memset(&zStrm, 0, 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 包含比特流 header 011b: BFINAL=1; BTYPE=01b;并修复了字符 'a' (0x61) 的霍夫曼代码,后跟至少 7 个零位以结束该块。显然这还不够;请帮忙。 提前谢谢了; 波巴.
您的代码正在寻找 zlib 流 header,如 RFC 1950 中所定义。它没有找到它。该 RFC 定义了 zlib header 和包裹在原始 deflate 流周围的预告片。
你的问题中有原始压缩流。要解码它而不是 zlib 流,您需要使用 inflateInit2()
,windowBits
值为 -15
。