zlib开发笔记(一):zlib库介绍、编译和工程模板
前言
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库介绍、编译和工程模板的更多相关文章
- Qt开发笔记:OpenSSL库介绍、windows上mingw32版本的OpenSSL编译模块化
前言 Windows上mingw32版本的openssl的编译是属于比较棘手的,OpenSSL本身不提供支持.. OpenSSL 介绍 OpenSSL是一个开放源代码的软件库包,应用程序可 ...
- zlib开发笔记(四):zlib库介绍、编译windows vs2015x64版本和工程模板
前言 Qt使用一些压缩解压功能,介绍过libzip库编译,本篇说明zlib库.需要用到zlib的msvc2015x64版本,编译一下. 版本编译引导 zlib在windows上的mingw32 ...
- zlib开发笔记(三):zlib库介绍、在ubuntu上进行arm平台交叉编译
前言 方便做嵌入式arm的交叉移植zlib库. Zlib库 zlib被设计为一个免费的,通用的,法律上不受限制的-即不受任何专利保护的无损数据压缩库,几乎可以在任何计算机硬件和操作系统上使 ...
- Gif开发笔记(一):gif介绍、编译和工程模板
前言 实现gif图片的解码和生成. Gif 简介 GIF格式的名称是Graphics Interchange Format的缩写,是在1987年由Compu Serve公司为了填补跨平 ...
- iOS学习笔记9 - 组件库介绍1
总算成功开发完了第一个较大的功能(即时通信).毕竟不可能什么东西都从轮子开始造,于是用到了一些组件,这里简单列举一下吧. 1. FMDB 作为一种文件型的数据存储方式,SQLite在iOS开发中自然也 ...
- 流媒体服务器开发笔记(2)--RTCP协议介绍
http://blog.sina.com.cn/s/blog_53061af00100o2no.html ——————————————————————————————————————————————— ...
- iOS陆哥开发笔记(七) (AVFoundation简单介绍)
在AVFoundation框架中AVAudioRecorder类专门处理录音操作,支持多种音频格式. 以下是经常使用的属性和方法: 属性 说明 @property(readonly, getter=i ...
- Qt+腾讯IM开发笔记(一):腾讯IM介绍、使用和Qt集成腾讯IM-SDK的工程模板Demo
前言 开发一个支持全国的IM聊天,可以有基本的功能,发送文本.图片.文件等等相关内容. 腾讯IM产品 概述 腾讯即时通信IM是腾讯推出的即时聊天程序,当前时间为2020年3月(腾讯IM的优 ...
- SDL开发笔记(二):音频基础介绍、使用SDL播放音频
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- libzip开发笔记(二):libzip库介绍、ubuntu平台编译和工程模板
前言 Qt使用一些压缩解压功能,选择libzip库,libzip库比较原始,也是很多其他库的基础支撑库,编译过了windows版本,有需求编译一个ubuntu版本的,交叉编译需求的同样可参照本文章 ...
随机推荐
- [转帖]Linux命令学习手册-readelf
https://www.jianshu.com/p/405844abefae readelf elf-file(s) 功能 用于显示 elf 格式文件的信息. 描述 readelf 用来显示一个或者多 ...
- SPECCPU2006的学习与使用
SPECCPU2006的学习与使用 摘要 这个周末问题不是很多, 陪孩子写作业时顺便研究了下SPEC2006 虽然比较落后了. 但是总比没有要强一些. 其实集团有资源, 但是联系不到人, 只能自己学习 ...
- [转帖]TaiShan v110 - Microarchitectures - HiSilicon
https://en.wikichip.org/wiki/hisilicon/microarchitectures/taishan_v110 Edit Values TaiShan v110 µa ...
- vue3动态路由的addRoute和removeRoute使用
为什么需要有动态路由 有些时候,我们不同的身份角色,我们希望可以展示不同的菜单. 比如说:普通用户只有展示A菜单,管理员有A,B,C菜单 这个时候,我们就需要动态路由了! Vue2和vue3的区别 V ...
- Ant Design Vue数字输入框InputNumber 有值但是验证却不能够通过
InputNumber 有值但是验证却不能够通过 今天遇见这样一个问题,InputNumber 输入框中有值 但是却却提示验证不能够通过 后来经过分析,怀疑是数据类型不正确, 后面经过验证,果然是数据 ...
- vm-insert到vm-storage链路上的配置说明
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 本文是为了解决Victoria-Metrics中的过载问题 ...
- vim 从嫌弃到依赖(13)——motion 进阶
在最开始的时候我们介绍了一些vim中的motion 包括如何在字符间.单词间.行间以及多行间移动.·但是motion中的内容可远不止我们介绍的这些,平时用到的也远不止之间介绍的那些. 之所以没有一次介 ...
- 来啦!2020 Java开源项目权威排名解读:Spring Boot排名稳定、Shiro未上榜
这篇文章对于我们做技术选型以及技术学习都有极强的指导性作用,建议收藏! 原创不易,若有帮助,欢迎点赞! 推荐: 接近100K star 的Java学习/面试指南 Github 95k+点赞的Java面 ...
- MetaGPT( The Multi-Agent Framework):颠覆AI开发的革命性多智能体元编程框架
"MetaGPT( The Multi-Agent Framework):颠覆AI开发的革命性多智能体元编程框架" 一个多智能体元编程框架,给定一行需求,它可以返回产品文档.架构设 ...
- 深度学习应用篇-元学习[16]:基于模型的元学习-Learning to Learn优化策略、Meta-Learner LSTM
深度学习应用篇-元学习[16]:基于模型的元学习-Learning to Learn优化策略.Meta-Learner LSTM 1.Learning to Learn Learning to Lea ...