ZLib库使用详细教程 以及标准ZLib函数和QT自带压缩函数比较

news2025/1/5 9:45:27

1. 下载Zlib

官网下载地址如下:http://www.zlib.net/

2. 利用cmake编译zlib

有两种方法可以打开cmake-gui

  • win+R输入cmd打开命令行,在命令行中输入cmake-gui可以直接打开应用界面
  • 找到你一开始安装cmake的文件夹,在bin子文件夹中双击cmake-gui也可以打开
    在这里插入图片描述

标题应用打开后,输入zlib源文件的位置,以及build文件夹的位置
其中,build文件夹需要自己新建空文件夹,一般会选择建在源文件的目录下
在这里插入图片描述

上面的红色不用管,从左到右依次点击下方三个按钮
另:如果点击configure后,红色依旧存在,则需要点击红色,把上面需要的前置路径去配置好

第三步:利用VS2022安装zlib
在上述点击Open Project后,会自动打开VS2022,找到INSTALL子项,右键去设置为启动项
[图片]
设置成为启动项后,再次右键点击去生成,若显示为下图,则表示安装成功
在这里插入图片描述

第四步:检查zlib是否安装与配置成功
打开C盘的program file文件夹,看到有zlib文件夹则表示安装成功
在这里插入图片描述

报错:
实际运行时,发现报错了,如下:
在这里插入图片描述

启动VS以管理员身份运行,然后打开项目即可。这种原因是CMAKE_INSTALL_PREFIX设置为C盘,C盘有权限所以有此报错。

3. Zlib和QT自带的zlib效果比较

经测试,QT自带的压缩字符串会比标准的ZLib库多前面的四个字节大小,后面的字符内容是完全一样的。
在这里插入图片描述

3.1 qt自带的zlib使用

使用qCompress()和qUncompress()函数来进行压缩和解压操作:

QByteArray compressString(const QString &str) {
    // 将QString转换为UTF-8编码的QByteArray
    QByteArray byteArray = str.toUtf8();
    // 使用qCompress进行压缩
    return qCompress(byteArray);
}

QString decompressString(const QByteArray &compressedData) {
    // 解压缩数据
    QByteArray byteArray = qUncompress(compressedData);
    // 将QByteArray转换为QString,假设它是UTF-8编码
    return QString::fromUtf8(byteArray);
}

3.2 标准Zlib库使用

在这里插入图片描述
在这里插入图片描述

添加include引用目录,添加zlib\lib文件夹中的库文件zlibd.lib

//压缩
char* Compress(char* src,int srcLen, int* comprLen){
    int compressrate = 2;
    int err;
    int len = strlen(src) + 1;
    std::cout << "len:"<<len<<",srcLen:"<<srcLen<<std::endl;
    if(len != srcLen){
        std::cout << "strlen != srcLen" << std::endl;
    }
    *comprLen = len*compressrate*sizeof(int);
    std::cout << "ori comprLen:" << *comprLen << std::endl;
    Byte *compr = (Byte*)calloc((uInt)(*comprLen), 1);
    if (compr == Z_NULL) {
        printf("out of memory\n");
        return NULL;
    }
    err = compress(compr,(uLong*)comprLen,(const Bytef*)src,(uLong)len);
//    CHECK_ERR(err, "compress");
    return (char*)compr;
}

//解压缩
char* Uncompress(char* compr, int comprLen,int& uncomprLen){
    int compressrate = 2;
    uncomprLen = comprLen * compressrate * sizeof(int);
    std::cout << "ori uncomprLen:" << uncomprLen << std::endl;
    Byte *uncompr = (Byte*)calloc((uInt)(uncomprLen), 1);
    if (uncompr == Z_NULL) {
        printf("out of memory\n");
        return NULL;
    }
    int err;
    err = uncompress(uncompr, (uLong*)(&uncomprLen),
                     (Byte*)compr, (uLong)comprLen);
//    CHECK_ERR(err, "uncompress");
    return (char*)uncompr;
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2270014.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

加载Tokenizer和基础模型的解析及文件介绍:from_pretrained到底加载了什么?

加载Tokenizer和基础模型的解析及文件介绍 在使用Hugging Face的transformers库加载Tokenizer和基础模型时&#xff0c;涉及到许多文件的调用和解析。这篇博客将详细介绍这些文件的功能和它们在加载过程中的作用&#xff0c;同时结合代码片段进行解析。 下图是我本地下载好模…

SpringAI从入门到熟练

学习SpringAI的记录情况 文章目录 前言 因公司需要故而学习SpringAI文档&#xff0c;故将自己所见所想写成文章&#xff0c;供大佬们参考 主要是为什么这么写呢&#xff0c;为何不抽出来呢&#xff0c;还是希望可以用的时候更加方便一点&#xff0c;如果大家有需求可以自行去…

嵌入式系统中C++的基本使用方法

大家好,今天主要给大家分享一下,最近操作C++代码的控制方法。 什么是构造函数?构造函数在对象实例化时被系统自动调用,仅且调用一次。 什么是析构函数?与构造函数相反, 在对象结束其生命周期时系统自动执行析构函数。 第一个:析构函数与构造函数区别 实例代码: #inclu…

【Qt】多元素控件:QListWidget、QTableWidget、QTreeWidget

目录 QListWidget 核心属性&#xff1a; 核心方法&#xff1a; 核心信号&#xff1a; 例子&#xff1a; QListWidgetItem QTableWidget 核心方法&#xff1a; 核心信号 QTableWidgetItem 例子&#xff1a; QTreeWidget 核心方法&#xff1a; 核心信号&#xff1a…

HTML5 标签输入框(Tag Input)详解

HTML5 标签输入框&#xff08;Tag Input&#xff09;详解 标签输入框&#xff08;Tag Input&#xff09;是一种用户界面元素&#xff0c;允许用户输入多个标签或关键词&#xff0c;通常用于表单、搜索框或内容分类等场景。以下是实现标签输入框的详细讲解。 1. 任务概述 标…

前端加载自己制作的栅格切片服务充当底图

注意mapview的center属性和tilelayer.fullExtent的区别。 前者是设置mapview显示的中心点坐标&#xff0c; const view new MapView({ container: "viewDiv", map: map, center:[100,25] }); 后者是读…

Windows 安装Mysql 8.1.0版本,并迁移数据库

一、下载MySQL压缩包 进入MySQL官网&#xff1a;https://downloads.mysql.com/archives/community/ 下载zip包到本地&#xff0c;然后解压缩。 二、安装MySQL 1、 创建my.ini文件 新创建一个my.ini文件&#xff0c;文件内容如下&#xff0c;记得修改【basedir】和【datadir…

uniapp——微信小程序,从客户端会话选择文件

微信小程序选择文件 文章目录 微信小程序选择文件效果图选择文件返回数据格式 API文档&#xff1a; chooseMessageFile 微信小程序读取文件&#xff0c;请查看 效果图 选择文件 /*** description 从客户端会话选择文件* returns {String} 文件路径*/ const chooseFile () &g…

学习threejs,导入CTM格式的模型

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.ColladaLoader DAE模…

1、pycharm、python下载与安装

1、去官网下载pycharm 官网&#xff1a;https://www.jetbrains.com/pycharm/download/?sectionwindows 2、在等待期间&#xff0c;去下载python 进入官网地址&#xff1a;https://www.python.org/downloads/windows/ 3、安装pycharm 桌面会出现快捷方式 4、安装python…

虚拟机Centos下安装Mysql完整过程(图文详解)

目录 一. 准备工作 1. 设置虚拟机静态IP 2. 卸载Mysql 3. 给CentOS添加rpm源 二. 安装MySQL 1. 安装mysql服务 2. 启动mysql服务 3. 开启MySQL开机自启动 4. 查看mysql服务状态 5. 查看mysql初始密码 6. 登录mysql &#xff0c;修改密码 7. 允许外部访问MySQL数据库…

SwiftUI:多语言实现富文本插值

实现的UI需求&#xff1a; 要求&#xff1a; 英文显示&#xff1a;3068 people have joined this plan today! 中文显示&#xff1a;今日有 3068 人已加入此计划&#xff01; 实现代码&#xff1a; Text(AttributedString(localized:"**\(payPeoples)** people have joi…

中巨伟业推出高安全高性能32位智能卡内核可编程加密芯片SMEC88SP/ST

1、产品特性  以最高安全等级的智能卡芯片内核为基础&#xff0c;具有极高的软硬件安全性  实现客户关键功能或算法代码下载&#xff0c;用户可以灵活实现自有知识产权的保护  标准 SOP8、SOT23-6 封装形式&#xff0c;器件封装小  标准 I2C 接口&#xff0c;具有接…

部署SenseVoice

依赖 Conda cuda pythor 查看GPU版本-CSDN博客 创建虚拟conda环境 conda create --name deeplearn python3.10 conda activate deeplearn git clone https://github.com/FunAudioLLM/SenseVoice.git cd SenseVoice pip install -r requirements.txt pip install gradio pip …

微信流量主挑战:用户数30!新增文档转化功能,解决docker运行jar包报错SimSun找不到的问题(新纪元5)

哎呀&#xff0c;今天忙到飞起&#xff0c;文章晚点更新啦&#xff01;不过好消息是&#xff0c;我们的小程序用户终于突破30啦&#xff0c;感谢大家的支持&#xff01;而且&#xff0c;大家期待已久的文档转化功能明天就要上线啦&#xff0c;目前支持word转pdf&#xff0c;pdf…

操作系统课后题总复习

目录 一、第一章 1.1填空题 1.2单项选择题 1.3多项选择题 1.4判断题 1.5名词解释 1.6简答题 二、第二章 2.1填空题 2.2单项选择题 2.3 多项选择题 2.4判断题 2.5名词解释 2.6简答题 三、第三章 3.1填空题 3.2单项选择题 3.3多项选择题 3.4判断题 3.5名词解…

C语言期末复习笔记(下)

目录 九、指针 1.指针变量的定义和初始化 2.间接寻址符* 3.按值调用和按址调用 4.实例 5.函数指针 6.指针变量和其它类型变量的对比 十、字符串 1.字符串常量 2.字符串的存储 3.字符指针 4.字符串的访问和输入/输出 5.字符串处理函数 &#xff08;1&#xff09;str…

保姆级教程Docker部署ClickHouse镜像

目录 1、安装Docker及可视化工具 2、创建挂载目录 3、获取配置文件 4、运行ClickHouse容器 5、Compose运行ClickHouse容器 6、查看ClickHouse运行状态 7、安装包部署 1、安装Docker及可视化工具 Docker及可视化工具的安装可参考&#xff1a;Ubuntu上安装 Docker及可视化…

飞牛私有云APP结合cpolar内网穿透技术实现远程连接本地fnOS NAS

文章目录 前言1. 本地连接测试2. 飞牛云安装Cpolar3. 配置公网连接地址4. 飞牛云APP连接测试5. 固定APP远程地址6. 固定APP地址测试 前言 现在生活和工作中的各种设备都变得越来越智能&#xff0c;而数据存储的需求也随之剧增。想象一下&#xff1a;你正在外地出差&#xff0c…

计算机网络 (17)点对点协议PPP

一、PPP协议的基本概念 PPP协议最初设计是为两个对等节点之间的IP流量传输提供一种封装协议&#xff0c;它替代了原来非标准的第二层协议&#xff08;如SLIP&#xff09;。在TCP/IP协议集中&#xff0c;PPP是一种用来同步调制连接的数据链路层协议&#xff08;OSI模式中的第二层…