【问题标题】:c++ zlib: incorrect header checkc ++ zlib:不正确的标头检查
【发布时间】:2015-05-29 10:13:26
【问题描述】:

使用 zlib 版本 1.2.7 我遇到了一个奇怪的问题:调用 inflate() 失败,出现错误 -3 Z_DATA_ERROR 和消息“不正确的标头检查”。 在此之前使用 deflate() 压缩数据。 这是此错误的简单示例。它有什么问题?

    std::string testWord = "Hello world";
const int buffSize = 1000;
byte buffer[buffSize];
byte outBuffer[buffSize];
z_stream readStream, writeStream;

readStream.zalloc = Z_NULL;
readStream.zfree = Z_NULL;
readStream.opaque = Z_NULL;
readStream.avail_in = 0;
readStream.next_in = Z_NULL;

writeStream.zalloc = Z_NULL;
writeStream.zfree = Z_NULL;
writeStream.opaque = Z_NULL;
writeStream.avail_in = 0;
writeStream.next_in = Z_NULL;

int rez = inflateInit(&readStream);
if (rez != Z_OK)
    std::cout << "InflateInit returned error " << rez;

rez = deflateInit(&writeStream, Z_DEFAULT_COMPRESSION);
if (rez != Z_OK)
    std::cout << "deflateInit returned error " << rez;

writeStream.next_in = (byte*)testWord.c_str();
writeStream.avail_in = testWord.size();
writeStream.next_out = (Bytef*) buffer;
writeStream.avail_out = buffSize;

rez = deflate(&writeStream, Z_FINISH);
if (rez != Z_STREAM_END)
    std::cout << "deflate returned error " << rez;

rez = deflateEnd(&writeStream);
if (rez != Z_OK)
    std::cout << "deflateEnd returned error " << rez;

readStream.next_in = buffer;
readStream.avail_in = buffSize - writeStream.avail_out;
readStream.next_out = outBuffer;
readStream.avail_out = buffSize;

rez = inflate(&readStream, Z_FINISH);
if (rez != Z_STREAM_END)
{
    std::cout << "inflate returned error " << rez << " msg: " << readStream.msg;
    return;
}

【问题讨论】:

    标签: c++ zlib deflate inflate


    【解决方案1】:

    这看起来像一个错误:

    readStream.avail_out = 0;
    

    应该是这样的:

    readStream.avail_out = buffSize;
    

    【讨论】:

    • 是的,这是一个错误,谢谢。我修好了,但主要问题没有解决。
    • @Andrey 你找到解决方案了吗?
    猜你喜欢
    • 2015-09-21
    • 2015-09-25
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 2018-12-13
    • 2021-08-31
    • 1970-01-01
    • 2013-03-06
    相关资源
    最近更新 更多