我正在使用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位整数。
那我该怎么办呢?我是否必须找到未压缩数据的长度(有没有办法?我只有压缩数据。)?一个例子将不胜感激。
答案 0 :(得分:1)
qUncompress
不是通用的解压缩功能。它只应与使用qCompress
压缩的数据一起使用。
如果您的数据是使用qCompress
之外的其他内容压缩的,则必须以相同的方式对其进行解压缩 - 直接使用zlib,使用外部实用程序等。
像您一样使用qUncompress
,您依赖于可能随时发生变化的实施细节。不要这样做。简单地假设qCompress
是一个黑盒子,并使用其他人没有做过的外来压缩器实现。