qUncompress:Z_DATA_ERROR:输入数据已损坏

时间:2015-07-03 13:24:18

标签: qt zlib compression

我正在使用Qt的qUncompress并找到一个问题我无法找到更多信息来解决它。 这是我的代码:

    #include <QCoreApplication>
    #include <QByteArray>
    #include <QFile>
    #include <QDebug>

    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        QFile f("/user/XXXXX/home/AgeRegression"); // hided
        if (f.exists())
            qDebug() << "File exists";
        else
            qDebug() << "Missing file";
        f.open(QIODevice::ReadOnly);

        QByteArray qb = f.readAll();
        qb = qUncompress(qb);
        qDebug()<<"Successfully";
        const char *qt_version = qVersion();
        qDebug()<< QString(qt_version);
        return a.exec();
     }

这是输出:

     File exists
     qUncompress: Z_DATA_ERROR: Input data is corrupted
     Successfully
     "5.3.2"

从Qt的文档中(你可以找到here):

  

注意:如果要使用此函数解压缩使用zlib压缩的外部数据,首先需要在包含数据的字节数组前面添加一个四字节头。标头必须包含未压缩数据的预期长度(以字节为单位),表示为无符号,大端,32位整数。

那我该怎么办呢?我是否必须找到未压缩数据的长度(有没有办法?我只有压缩数据。)?一个例子将不胜感激。

1 个答案:

答案 0 :(得分:1)

qUncompress不是通用的解压缩功能。它只应与使用qCompress压缩的数据一起使用。

如果您的数据是使用qCompress之外的其他内容压缩的,则必须以相同的方式对其进行解压缩 - 直接使用zlib,使用外部实用程序等。

像您一样使用qUncompress,您依赖于可能随时发生变化的实施细节。不要这样做。简单地假设qCompress是一个黑盒子,并使用其他人没有做过的外来压缩器实现。