我希望在压缩文本时保持地球上其他所有应用程序(包括Web应用程序)之间的互操作性.由于qCompress和qUncompress似乎与谷物相反,我试图直接从我的Qt应用程序中使用zlib.
我将接受最简单(最简单)的答案,它向我展示如何直接使用带有QByteArray的zlib库或修改qCompress的输出,以便它可以在Qt应用程序之外使用.
这是我的尴尬尝试:
QByteArray tdata = QString("Oh noes!").toUtf8();
QByteArray cdata;
uLongf len = 12 + 1.002*tdata.length();
compress(&cdata, &len, &tdata, tdata.length());
Run Code Online (Sandbox Code Playgroud)
而错误:
错误:无法将'QByteArray*'转换为'Bytef*'以将参数'1'转换为'int compress(Bytef*,uLongf*,const Bytef*,uLong)'
然后我尝试使用QByteArray :: constData()
compress(cdata.constData(), &len, &tdata, tdata.length());
Run Code Online (Sandbox Code Playgroud)
但得到以下错误:
错误:从'const char*'到'Bytef*'的无效转换
我不知道Bytef是什么,所以我开始查看zlib源代码进行调查.但我能找到的就是QtSources/src/3rdparty/zlib/zconf.h
# define Bytef z_Bytef
Run Code Online (Sandbox Code Playgroud)
所以现在我迷失了.
基于qUncompress中的这个注释,我认为这很容易.
注意:如果要使用此函数解压缩使用zlib压缩的外部数据,首先需要在包含数据的字节数组前面添加一个四字节头.标头必须包含未压缩数据的预期长度(以字节为单位),表示为无符号,大端,32位整数.
所以你可以像这样压缩它:
QByteArray tdata = QString("Oh noes!").toUtf8();
QByteArray compressedData = qCompress(tdata);
compressedData.remove(0, 4);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7370 次 |
| 最近记录: |