zlib开发笔记(一):zlib库介绍、编译和工程模板

article/2025/10/9 10:51:04

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/111877005
长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198808
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

Qt开发专栏:三方库开发技术

上一篇:没有了
下一篇:《zlib开发笔记(二):zlib库介绍、ubuntu平台编译和工程模板》


前言

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


版本编译引导

  • zlib在windows上的mingw32版本编译:《zlib开发笔记(一):zlib库介绍、编译和工程模板》
  • zlib在ubuntu上的编译:《zlib开发笔记(二):zlib库介绍、ubuntu平台编译和工程模板》
  • zlib在ubuntu上的arm交叉编译:《zlib开发笔记(三):zlib库介绍、在ubuntu上进行arm平台交叉编译》
  • zlib在windows上的msvc2015 x64版本编译:《zlib开发笔记(四):zlib库介绍、编译windows vs2015x64版本和工程模板》

zlib库

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


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.txtQString 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


上一篇:没有了
下一篇:《zlib开发笔记(二):zlib库介绍、ubuntu平台编译和工程模板》


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


http://chatgpt.dhexx.cn/article/2LKHJgqQ.shtml

相关文章

zlib包的下载

zlib包下载地址&#xff1a;http://www.zlib.net/ 这里注意很多帖子都是直接给了具体的连接&#xff0c;比如&#xff1a; wget http://www.zlib.net/zlib-1.2.8.tar.gz 然后... 所以&#xff0c;这里不宜生搬硬套&#xff0c;直接去官网上看&#xff0c;源码地址 ... 然后&am…

安装最新版本zlib

官方网址:http://www.zlib.net/ 进入官网看到,如图所示,最新版本为zlib 1.2.11 然后你用wget http://www.zlib.net/zlib 1.2.11或者wget http://www.zlib.net/zlib-1.2.11下载,那你永远下载不了. 嘿嘿,正确的下载方式是wget http://www.zlib.net/zlib-1.2.11.tar.gz 进入…

C++封装zlib库

C封装zlib库 1、zlib简介2、如何下载zlib库源代码3、如何安装zlib库4、zlib代码封装步骤4.1、编写初始化函数4.2、编写压缩、解压函数4.3、编写刷新数据函数 5、结论并附上源代码 1、zlib简介 zlib是提供数据压缩用的函式库&#xff0c;最早是由Jean-loup Gailly与Mark Adler所…

使用zlib库解压文件

下载zlib库源码&#xff1a;http://www.zlib.net/ 编译lib库 选择对应的Visual Studio工程目录打开zlibvc.sln文件&#xff0c;工程设置为Release模式&#xff0c;选中zlibstat项&#xff0c;将预处理器中的ASMINF宏删除&#xff08;重要否则会产生 L_get_length_code_mmx 的崩…

zlib的使用

测试项目目录结构如图 其中zlib源文件放置在libz目录下。 将ZLib源文件编译成静态库 1.在libz-cmake目录下的CMakeLists.txt中编写如下命令&#xff0c;生成静态库。 cmake_minimum_required (VERSION 3.3)project (z)file (GLOB_RECURSE SOURCES ${CMAKE_SOURCE_DIR}/libz/…

【zlib】linux安装zlib

一、zlib zlib适用于数据压缩的函式库&#xff0c;由Jean-oup Gailly(负责compression)和 MarkAdler(负责decompression)开发。 zlib被设计成一个免费的、通用的、法律上不受阻碍&#xff08;即没有被任何专利覆盖)的无损数据压缩库。zib几乎适用于任何计算器硬件和操作系统。…

linux下Zlib的安装与使用

1. zlib简介 zlib 适用于数据压缩的函式库,由Jean-loup Gailly (负责compression)和 Mark Adler (负责decompression)开发。    zlib被设计成一个免费的、通用的、法律上不受阻碍(即没有被任何专利覆盖) 的无损数据压缩库。zlib几乎适用于任何计算器硬件和操作系统。…

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

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://blog.csdn.net/qq21497936/article/details/118713737 长期持续带来更多项目与技术分享&#xff0c;咨询请加QQ:21497936、微信&#xff1a;yangsir198808 红胖子(红模仿)的博文大全&…

zlib使用教程

下载zlib http://www.zlib.net/ 编译zlib库 打开sln: zlib-1.2.11\contrib\vstudio\vc12\zlibvc.sln 生成库位置&#xff1a; zlib-1.2.11\contrib\vstudio\vc12\x86\ZlibDllRelease 调用zlib库 添加lib依赖库位置&#xff1a;zlibwapi.lib的文件位置 添加zlibwapi…

zlib库介绍一:zlib简介

目录 1.库简介 2.算法 3.计算资源 4.数据长度 5.业界使用 1.库简介 zlib是一套通用的解压缩开源库&#xff0c;提供了内存&#xff08;in-memory&#xff09;压缩和解压函数&#xff0c;能检测解压出来的数据完整性&#xff0c;由Jean-loup Gailly与Mark Adler所开发。源…

zlib压缩原理

数据压缩的本质 去除数据中的冗余信息&#xff0c;对于ABABABABABABAB字样的字符串&#xff0c;AB出现了7次&#xff0c;占用14个字节&#xff0c;如果将该字符串编码为7AB&#xff0c;只占用3个字节。 为什么需要对数据压缩 数据需要存储或者传输&#xff0c;为了节省磁盘空…

第三方库介绍——zlib库

文章目录 zlib1. zlib库介绍2. zlib库的应用3. 下载地址4. 函数使用教程4.1 compress 与 uncompress4.3 使用过程解析4.2 infate、deflate、z_stream 5. 交叉编译zlib库 zlib 1. zlib库介绍 zlib是一套通用的解压缩开源库&#xff0c;提供了内存&#xff08;in-memory&#x…

Zlib的安装与测试

官方网址:http://www.zlib.net/ 进入官网看到,如图所示,最新版本为zlib 1.2.11 然后你用wget http://www.zlib.net/zlib 1.2.11或者wget http://www.zlib.net/zlib-1.2.11下载,那你永远下载不了. 嘿嘿,正确的下载方式是wget http://www.zlib.net/zlib-1.2.11.tar.gz 进入…

Java多线程(详细了解java多线程机制)

每天进步一点点 一、程序、进程、线程1.1 什么是程序1.2 什么是进程1.3 什么是线程1.4 进程和线程的区别 二、创建线程的三种方式2.1 继承Thread类重写run()方法具体实现获取线程ID和名称修改线程名称 2.2 实现Runnable接口实现run()方法具体实现使用匿名内部类 2.3 实现Callab…

JAVA多线程和并发编程(三)- JAVA多线程信息共享

我们通常希望多个线程之间有信息的通信&#xff0c;而不是每个线程各自run方法执行完就结束了。那么多个线程间如何通信呢&#xff1f; Java中多线程通常通过共享变量进行信息共享。 1&#xff09;使用static变量共享信息&#xff0c;该方法适用于通过继承Thread类创建线程的方…

Java多线程的知识点

&#x1f331;&#x1f331;友友们大家好 我是你们的小王同学啊 今天给大家带来的是 java多线程的知识点 希望大家能支持小王 喜欢就给个三连吧 你们的三连是我制作的动力&#xff01;&#x1f497;&#x1f497; 小王的gitee&#xff1a;小王同学&#x1f370; 小王的github&a…

java线程调度

线程调度分为两种形式 1 分时调度模型: 所有线程轮流获得CPU使用权&#xff0c;平均分配每一个线程的CPU时间片 2 抢占式调度模型: 优先让优先级更高的线程使用CPU&#xff0c;如果线程优先级相同 那机会随机分配优先级 给优先级高的线程更多一些的时间片 而java的分配模式 是…

java多线程(详)

目录 一,什么叫线程&#xff1f; 那我们要先了解什么叫进程&#xff0c;线程依赖于进程而存在的。 二.多线程的创建 方式一&#xff1a;继承Thread类 方式二&#xff1a;实现Runnable接口 方式三&#xff1a;JDK 5.0新增&#xff1a;实现Callable接口 三种方式的比…

Java线程、Java多线程详细介绍

目录 一、进程和线程的区别 1.1 进程 1.2 线程 二、并发和并行 2.1 并行 2.2 并发 2.3 监控线程的执行情况 三、创建方式 3.1 继承Thread类 思考&#xff1a;为什么不直接通过对象调用start&#xff08;&#xff09;方法&#xff1f; 3.2 实现Runnable接口 …

【java】java多线程及线程池详解

目录 前言线程是什么&#xff1f;多线程是什么&#xff1f;多线程的作用和好处以及缺点守护线程和用户线程并发和并行的区别 一.线程的状态和常用方法1.线程各种状态转化图2.线程相关常用方法有① wait()② sleep(long timeout)③ join()④ yield()⑤ notify()和notifyAll() 3.…