You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

zlib压缩数据格式解析及解压方法(含qCompress()生成文件的扩展名与CLI工具推荐)

2. qCompress()生成文件的扩展名与CLI解压工具

这里要划个重点:qCompress()的输出不是纯标准zlib格式——它会在zlib压缩数据的最前面添加一个4字节的无符号整数,用来存储原始数据的未压缩大小(方便qUncompress()快速恢复)。这个额外的头部会导致直接用标准zlib工具解压失败。

方案一:生成标准可直接解压的文件(推荐)

如果要让文件能被标准工具直接识别解压,你需要修改代码,跳过qCompress()输出的前4字节,只写入后面的纯zlib数据流。比如在Qt中:

QByteArray rawData = readFileContent(); // 读取原始文件内容
QByteArray compressed = qCompress(rawData);
// 跳过前4字节的大小标识,写入纯zlib数据
QFile output("data.zlib");
output.open(QIODevice::WriteOnly);
output.write(compressed.mid(4));
output.close();

这种情况下,推荐用**.zlib或.zz**作为扩展名(.z也可以,但容易和旧的compress格式混淆),解压工具就用上面提到的zlib-flate、openssl、Python或7-Zip即可。

如果想让文件兼容性更强(比如让gunzip也能直接处理),可以把纯zlib数据封装成gzip格式(添加gzip的头部和尾部),这时用**.gz**作为扩展名,就能用gunzip data.gz或gzip -d data.gz直接解压了。

方案二:解压已生成的qCompress格式文件

如果已经有了带4字节Qt头部的文件,需要先剥离头部再解压:

  • 在Linux/macOS上用tail工具快速剥离:
    # 剥离前4字节,得到纯zlib数据
    tail -c +5 input.qz > input.zlib
    # 用zlib工具解压处理后的文件
    zlib-flate -uncompress < input.zlib > output_file
    
  • 在Windows PowerShell上的处理方式:
    Get-Content input.qz -Raw | Select-Object -Skip 4 | Set-Content -NoNewline input.zlib
    zlib-flate -uncompress < input.zlib > output_file
    

这种带Qt头的文件可以用自定义扩展名比如**.qz**来标识,但标准工具无法直接处理,必须先剥离头部才能解压。


内容的提问来源于stack exchange,提问作者iammilind

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 06:27:35