前言

  Qt使用一些压缩解压功能,介绍过libzip库编译,本篇说明zlib库。

 

zlib库

  zlib被设计为一个免费的,通用的,法律上不受限制的-即不受任何专利保护的无损数据压缩库,几乎可以在任何计算机硬件和操作系统上使用。
  官网:http://www.zlib.net/
  CSDN下载地址:https://download.csdn.net/download/qq21497936/13944558
  QQ群:1047134658(点击“文件”搜索“zlip”,群内与博文同步更新)

 

zlib编译

步骤一:解压

步骤二:Cmake配置(mingw32版本)

步骤三:生成工程

步骤四:命令行编译

步骤五:安装install

 

模块化

 

Demo

void ZlibManager::testEnv()
{
QString fileName = "1.txt";
QString outFileName = "1.txt_zip";
// 打开文件,读取进入内存
QFile file(fileName);
if(!file.open(QIODevice::ReadOnly))
{
LOG;
return;
}
QByteArray byteArray = file.readAll();
LOG << byteArray.size();
byteArray.append((char)0x00);
LOG << "origin size:" << byteArray.size() << ":" << QString(byteArray);
file.close();
// 计算压缩后的文件大小
int len = compressBound(byteArray.size());
LOG << len << (uLong)byteArray.size();
QByteArray compressByteArray = QByteArray(len, 0x00);
int ret = compress((uchar *)compressByteArray.data(), (uLong *)&len, (uchar *)byteArray.data(), (uLong)byteArray.size());
LOG << ret << len;
if(Z_OK == ret)
{
LOG << "Succeed to compress" << byteArray.size() << "to" << len;
}
// 压缩后存入文件
QFile outFile(outFileName);
if(!outFile.open(QIODevice::WriteOnly | QIODevice::Truncate))
{
LOG;
return;
}
outFile.write(compressByteArray, len);
outFile.close(); LOG << QString(compressByteArray.mid(0, len).toHex(' '));
// 解压
QByteArray unCompressByteArray = QByteArray(1024, 0x00);
// 入坑一 unCompressLen传入的时候,作为指示缓存区的长度,运行完后,作为传出实际的长度
int unCompressLen = unCompressByteArray.size();
LOG << unCompressByteArray.size();
ret = uncompress((uchar *)unCompressByteArray.data(), (uLong *)&unCompressLen, (uchar *)compressByteArray.data(), (uLong)len);
LOG << ret << unCompressLen << len;
if(Z_OK == ret)
{
LOG << "Succeed to uncompress" << compressByteArray.size() << "to" << unCompressLen;
} // 解压后的存文文件 2.txt
QString fileName2 = "2.txt";
QFile file2(fileName2);
if(!file2.open(QIODevice::WriteOnly | QIODevice::Truncate))
{
LOG;
return;
}
file2.write(unCompressByteArray, unCompressLen);
file2.close();
LOG << "restore:" << QString(unCompressByteArray.mid(0, unCompressLen));
}
 

运行结果

 

工程模板v1.0.0

  对应工程模板:zlibDemo_v1.0.0_基础模板_测试压缩解压.rar

 

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/111877005

zlib开发笔记(一):zlib库介绍、编译和工程模板的更多相关文章

  1. Qt开发笔记:OpenSSL库介绍、windows上mingw32版本的OpenSSL编译模块化

    前言   Windows上mingw32版本的openssl的编译是属于比较棘手的,OpenSSL本身不提供支持..   OpenSSL 介绍   OpenSSL是一个开放源代码的软件库包,应用程序可 ...

  2. zlib开发笔记(四):zlib库介绍、编译windows vs2015x64版本和工程模板

    前言   Qt使用一些压缩解压功能,介绍过libzip库编译,本篇说明zlib库.需要用到zlib的msvc2015x64版本,编译一下.   版本编译引导 zlib在windows上的mingw32 ...

  3. zlib开发笔记(三):zlib库介绍、在ubuntu上进行arm平台交叉编译

    前言   方便做嵌入式arm的交叉移植zlib库.   Zlib库   zlib被设计为一个免费的,通用的,法律上不受限制的-即不受任何专利保护的无损数据压缩库,几乎可以在任何计算机硬件和操作系统上使 ...

  4. Gif开发笔记(一):gif介绍、编译和工程模板

      前言   实现gif图片的解码和生成.   Gif 简介   GIF格式的名称是Graphics Interchange Format的缩写,是在1987年由Compu Serve公司为了填补跨平 ...

  5. iOS学习笔记9 - 组件库介绍1

    总算成功开发完了第一个较大的功能(即时通信).毕竟不可能什么东西都从轮子开始造,于是用到了一些组件,这里简单列举一下吧. 1. FMDB 作为一种文件型的数据存储方式,SQLite在iOS开发中自然也 ...

  6. 流媒体服务器开发笔记(2)--RTCP协议介绍

    http://blog.sina.com.cn/s/blog_53061af00100o2no.html ——————————————————————————————————————————————— ...

  7. iOS陆哥开发笔记(七) (AVFoundation简单介绍)

    在AVFoundation框架中AVAudioRecorder类专门处理录音操作,支持多种音频格式. 以下是经常使用的属性和方法: 属性 说明 @property(readonly, getter=i ...

  8. Qt+腾讯IM开发笔记(一):腾讯IM介绍、使用和Qt集成腾讯IM-SDK的工程模板Demo

    前言   开发一个支持全国的IM聊天,可以有基本的功能,发送文本.图片.文件等等相关内容.   腾讯IM产品 概述   腾讯即时通信IM是腾讯推出的即时聊天程序,当前时间为2020年3月(腾讯IM的优 ...

  9. SDL开发笔记(二):音频基础介绍、使用SDL播放音频

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  10. libzip开发笔记(二):libzip库介绍、ubuntu平台编译和工程模板

    前言   Qt使用一些压缩解压功能,选择libzip库,libzip库比较原始,也是很多其他库的基础支撑库,编译过了windows版本,有需求编译一个ubuntu版本的,交叉编译需求的同样可参照本文章 ...

随机推荐

  1. FIO的再学习-不同Raid,不同磁盘性能验证

    FIO的再学习-不同Raid性能验证 背景 发现自己对iodepth的和num_jobs的理解存在偏差 找了一些资料才发现自己很多地方做的不对. 这里找到一个新资料可以进行模拟数据库的测试 测试配置文 ...

  2. [转帖]CPU Turbo&Cstate&Pstate简介

    https://www.jianshu.com/p/eaefd1eb0ac6 测试环境 CPU 1 Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz 16 3130 3 ...

  3. [转帖]将 Cloudflare 连接到互联网的代理——Pingora 的构建方式

    https://zhuanlan.zhihu.com/p/575228941 简介 今天,我们很高兴有机会在此介绍 Pingora,这是我们使用 Rust 在内部构建的新 HTTP 代理,它每天处理超 ...

  4. [转帖]学习linux必须知道的命令

    https://www.cnblogs.com/aibeier/p/15315487.html 基础不牢,地动山摇.在linux命令行下查看命令帮助man用于查看命令的帮助信息 man cp--hel ...

  5. vue全局事件总线和消息订阅详细讲解

    全局事件总线 在写组件的时候,我们都知道父传递子 也知道子传递给父 但是组件间嵌套复杂的时候我们应该怎么通信呢? 有的小伙伴会说适用vuex,的确是可以解决问题的 下面我们说一下全局事件总线 一种组件 ...

  6. 【代码分享】使用 avx512 + 查表法,优化凯撒加密

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 关于凯撒加密,具体请看:https://en.wikipe ...

  7. git push卡住了 git push writing object

    解决方案: 执行命令:$ git config --global http.postBuffer 524288000 再次push 会卡在这里:POST git-receive-pack(892384 ...

  8. Protocol Buffer命名空间冲突

    原文在这里. 什么是Protocol Buffer命名空间冲突? 所有链接到Go二进制文件的Protocol Buffer声明都被插入到一个全局注册表中. 每个Protocol Buffer声明(例如 ...

  9. Map结构映射,避免每一个字段赋值

    var query1 = (from fore in forecastShippingDate join ship in shipOutOfStock on fore.Id equals ship.F ...

  10. 教你用JavaScript实现背景图像滑动

    案例介绍 欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个背景图像滚动效果.滚动鼠标背景图像缩小,下方滑动出现文字.通过实战我们将学会obj. ...