Qt之调用zlib压缩与解压缩功能

本文介绍了如何在Qt中利用zlib库进行内存数据和gz文件的压缩与解压缩操作,包括compress、uncompress、compress2等函数的使用,并提供了相关示例代码。同时,讨论了gzip文件格式及其在zlib库中的处理方法。
摘要由CSDN通过智能技术生成

目录

一.内存数据压缩和解压缩

二.gz文件压缩和解压缩


zlib是一种开源免费且通用的压缩库,由于zlib压缩效果比LZW好,而且解压缩速度快,更重要的是商业软件中使用zlib不需要缴纳版权费,所以很多游戏都使用zlib压缩资源文件。
zlib是由Jean-loup Gailly 和 Mark Adler共同编写完成的压缩库,可从官方网站http://www.zlib.net/自行下载编译,当然也有编译好的动态库和静态库,下载地址http://www.winimage.com/zLibDll/


当前最新的是1.2.3版本,zlib123.zip和zlib123dll.zip 都是要下载的,因为zlib123dll.zip 没头文件,需要用到zlib123.zip中的zlib.h

Qt中,可以使用QByteArray和QFile类来处理zlib压缩文件的解压缩操作。以下是一个简单的示例代码: ```cpp #include <QByteArray> #include <QFile> #include <zlib.h> bool decompressFile(const QString &sourceFile, const QString &destinationFile) { QFile inputFile(sourceFile); if (!inputFile.open(QIODevice::ReadOnly)) return false; QFile outputFile(destinationFile); if (!outputFile.open(QIODevice::WriteOnly)) return false; QByteArray inputBuffer = inputFile.readAll(); QByteArray outputBuffer; outputBuffer.resize(1024); z_stream stream; stream.zalloc = Z_NULL; stream.zfree = Z_NULL; stream.opaque = Z_NULL; stream.avail_in = inputBuffer.size(); stream.next_in = (Bytef *)(inputBuffer.constData()); stream.avail_out = outputBuffer.size(); stream.next_out = (Bytef *)(outputBuffer.data()); if (inflateInit(&stream) != Z_OK) return false; int result = Z_OK; while (result == Z_OK) { result = inflate(&stream, Z_NO_FLUSH); switch (result) { case Z_STREAM_END: break; case Z_NEED_DICT: result = Z_DATA_ERROR; case Z_DATA_ERROR: case Z_MEM_ERROR: inflateEnd(&stream); return false; } if (outputFile.write(outputBuffer, stream.total_out) == -1) { inflateEnd(&stream); return false; } stream.avail_out = outputBuffer.size(); stream.next_out = (Bytef *)(outputBuffer.data()); } outputFile.close(); inputFile.close(); inflateEnd(&stream); return true; } ``` 在这个示例中,我们首先打开了需要解压的文件和解压后的目标文件。然后,我们读取整个输入文件并将其存储在QByteArray变量中。接下来,我们创建了一个z_stream结构体,并将其初始化为使用zlib库进行解压缩操作。然后,我们通过调用inflateInit()函数来初始化解压缩操作。接下来,我们使用while循环来逐步解压缩输入数据,并将解压缩后的数据写入输出文件。最后,我们调用inflateEnd()函数来释放z_stream结构体所占用的内存。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

草上爬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值