【问题标题】:What is the format of the data compressed using zlib and how to uncompress them from command line or other apps?使用 zlib 压缩的数据的格式是什么,以及如何从命令行或其他应用程序解压缩它们?
【发布时间】:2021-08-19 10:03:37
【问题描述】:
我正在使用qCompress() 来压缩文件中的数据。现在的要求是,这个文件应该是不可手动压缩的,无论是通过命令行还是通过一些标准的压缩工具。
由于qCompress() 使用 zlib 库,该文件的扩展名应该是什么(即 .zip、.gz、.bz 等)?
另外应该使用什么样的独立 cli 工具来解压缩此类文件?
(通过编程我们可以使用qUncompress())。
【问题讨论】:
标签:
c++
qt
compression
zlib
file-extension
【解决方案1】:
文档很少,但据我所知,qCompress() 写入了一个四字节长度,后跟一个 zlib 流。该格式没有文件格式、扩展名或命令行工具。你必须自己写。
这将非常简单。只需丢弃前四个字节,然后将其余字节提供给zlib(您的机器上可能已经安装了一个 C 库)。
如果您使用的是 Unixish 系统,则可以使用 dd 去除前四个字节,然后将生成的 zlib 流提供给 pigz -dz。
【讨论】:
-
从您的回答中得到提示,使用“zlib.h”的::compress2() 比通过qCompress() 路线更好。由于 qCompress() 是在 zlib 上实现的,因此在 Ubuntu 中通过 -lz 选项链接它更容易。我相信它也应该适用于其他平台。