C/C++Zlib实现文件压缩与解压lyshark

在软件开发和数据处理中,对数据进行高效的压缩和解压缩是一项重要的任务。这不仅有助于减小数据在网络传输和存储中的占用空间,还能提高系统的性能和响应速度。本文将介绍如何使用zlib库进行数据的压缩和解压缩,以及如何保存和读取压缩后的文件。zlib是一个开源的数据压缩库,旨在提供高效、轻量级的压缩和解压缩算法。其核心压缩算法基于DEFLATE,这是一种无损数据压缩算法,通常能够提供相当高的压缩比。zlib库广泛应用于多个领域,包括网络通信、文件压缩、数据库系统等。

使用CreateFile打开文件,通过WriteFile向文件中写出数据,最后调用CloseHandle关闭句柄,实现文件的保存。

#defineZLIB_WINAPI#include#include#include#include#include#include#includeusingnamespacestd;#pragmacomment(lib,"Shlwapi.lib")#pragmacomment(lib,"zlibstat.lib")BOOLSaveToFile(char*pszFileName,BYTE*pData,DWORDdwDataSize){ charszSaveName[MAX_PATH]={0}; lstrcpy(szSaveName,pszFileName); HANDLEhFile=CreateFile(szSaveName,GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE,NULL); if(INVALID_HANDLE_VALUE==hFile) { returnFALSE; } DWORDdwRet=0; WriteFile(hFile,pData,dwDataSize,&dwRet,NULL); CloseHandle(hFile); returnTRUE;}intmain(intargc,char*argv[]){ charszBuffer[1024]={0}; strcpy(szBuffer,"test123123"); SaveToFile("d://test.txt",(BYTE*)szBuffer,sizeof(szBuffer)); system("pause"); return0;}文件压缩compress是zlib库提供的用于数据压缩的函数,通过该函数可以将数据进行压缩。下面是一个示例,演示了如何使用zlib库进行文件压缩。

它的原型如下:

intcompress(Bytef*dest,uLongf*destLen,constBytef*source,uLongsourceLen);compress函数的作用是将source指向的数据进行压缩,并将结果存放在dest指向的缓冲区中。destLen传入时应该是dest缓冲区的大小,函数执行后,destLen会更新为实际压缩后数据的大小。

函数返回值为压缩的执行状态,可能的返回值包括:

这个函数实际上是使用DEFLATE算法进行压缩,DEFLATE是一种通用的压缩算法,也是zlib库的核心算法之一。压缩后的数据可以使用uncompress函数进行解压缩。

总体而言,compress函数提供了一种简单的方式,可以在应用程序中对数据进行压缩,适用于需要减小数据体积的场景,比如网络传输或数据存储。

intuncompress(Bytef*dest,uLongf*destLen,constBytef*source,uLongsourceLen);uncompress函数的作用是将source指向的数据进行解压缩,并将结果存放在dest指向的缓冲区中。destLen传入时应该是dest缓冲区的大小,函数执行后,destLen会更新为实际解压缩后数据的大小。

函数返回值为解压缩的执行状态,可能的返回值包括:

uncompress函数实际上是使用DEFLATE算法进行解压缩,与compress函数相对应。这两个函数共同构成了zlib库中的基本数据压缩和解压缩功能。

在实际应用中,可以使用这两个函数来处理需要压缩和解压缩的数据,例如在网络通信中减小数据传输量或在存储数据时减小占用空间。

调用CompressData压缩文件,返回结果pCompressData存放文件内存字节,结果dwCompressDataSize存放长度,并调用SaveToFile保存到本地。

intmain(intargc,char*argv[]){BOOLbRet=FALSE;BYTE*pCompressData=NULL;DWORDdwCompressDataSize=0;//压缩文件bRet=CompressData("d:\\test.exe",&pCompressData,&dwCompressDataSize);if(TRUE==bRet){std::cout<<"已压缩"<

intmain(intargc,char*argv[]){BOOLbRet=FALSE;BYTE*pUncompressData=NULL;DWORDdwUncompressDataSize=0;//解压文件bRet=UncompressData("d:\\test.zlib",&pUncompressData,&dwUncompressDataSize);if(TRUE==bRet){std::cout<<"已解压"<

此时打开项目属性页,找到链接器,高级选项卡,将映像安全处理改为否即可,如下图所示;

通过使用zlib库,我们可以方便地在应用程序中实现数据的压缩和解压缩功能。这对于需要减小数据传输量或在存储数据时减小占用空间的场景非常有用。在实际应用中,可以根据需要调整缓冲区大小和处理流程,以适应不同的数据处理需求。

THE END
1.zlibHomeSiteWelcome to thezlibhome page, web pages originally created by Greg Roelofs and maintained byMark Adler. If this page seems suspiciously similar to thePNG Home Page, rest assured that the similarity iscompletelycoincidental. No, really. zlibwas written byJean-loup Gailly(compression) andMark Adler(http://www.zlib.net/
2.zlib库详解1.zlib简介 zlib 适用于数据压缩的函式库,由Jean-loup Gailly(负责compression)和Mark Adler(负责decompression)开发。 zlib被设计成一个免费的、通用的、法律上不受阻碍(即没有被任何专利覆盖) 的无损数据压缩库。zlib几乎适用于任何计算器硬件和操作系统。 https://blog.csdn.net/windeal3203/article/details/52966232/
3.GitHubmadler/zlib madler/zlibPublic NotificationsYou must be signed in to change notification settings Fork2.5k Star5.8k develop BranchesTags Code Folders and files Name Last commit message Last commit date Latest commit Cannot retrieve latest commit at this time.https://github.com/madler/zlib
4.ZlibforWindowsZlib: general purpose data compression / decompression library Version 1.2.3 Description zlib is designed to be a free, general-purpose, legally unencumbered -- that is, not covered by any patents -- lossless data-compression library for use on virtually any computer hardware and operating systemhttps://gnuwin32.sourceforge.net/packages/zlib.htm
5.zlib—Compressioncompatiblewithgzip—Python3.13.0For applications that require data compression, the functions in this module allow compression and decompression, using the zlib library. The zlib library has its own home page at https://www.zlibhttps://docs.python.org/3/library/zlib.html
6.node.js’szlibmoduleZlib# Stability: 2 - Stable Source Code: lib/zlib.js The node:zlib module provides compression functionality implemented using Gzip, Deflate/Inflate, and Brotli. To access it: const zlib = require('node:zlib');copy Compression and decompression are built around the Node.js Streams API. http://nodejs.org/api/zlib.html
7.zlibirary电子图书馆zlibirary镜像入口zlibirary是一款线上图书类的网站,许许多多的小伙伴在寻找这个网站的入口,今天为大家带来的就是zlibirary入口地址,希望帮助大家让大家能轻松的获得这个地址,让大家能搜索你需要的图书文献。 zlibirary电子图书馆-zlibirary镜像入口 z-libirary官 网登录入口:https://z-lib.is/ http://www.csshytbc.cn/news/2712.html
8.PHP:ZlibZlib 压缩? 简介 安装/配置 需求 安装 运行时配置 资源类型 预定义常量 示例 Zlib 函数 deflate_add— Incrementally deflate data deflate_init— Initialize an incremental deflate context gzclose— Close an open gz-file pointer gzcompress— Compress a string https://php.net/manual/zh/book.zlib.php
9.zlib软件下载zlib最新版下载v1.065zlib软件下载是一款为用户提供丰富电子书资源的手机应用。这款应用通过其广泛的书籍库,涵盖了古今经典书籍以及国内外各种文学内容,为用户提供了一个便捷、高效的阅读平台。此外,zlib还考虑了不同用户的阅读偏好,除了文学名著外,还整理了网络小说等多样化的内容,以满足用户多样化的阅读需求。 Zlib软件介绍 zlib应用的优https://shouyou.3dmgame.com/android/421746.html
10.Zlib开放百科Zlib 您可以在Wikipedia上了解到此条目的英文信息ZlibThanks, Wikipedia. 您还可以在维基百科上了解到此条目的中文信息Zlib感谢, 维基百科. zlib是提供文件压缩之用的函数库。 链接 zlib官方网站 分享您的观点 登录 页面 阅读 查看源代码 查看历史http://wiki.huihoo.com/wiki/Zlib
11.ZlibcZlibc - transparently access compressed fileshttp://zlibc.linux.lu/
12.Zlib函数[php中文手册]在线原生手册zlib_decode — Uncompress any raw/gzip/zlib encoded data zlib_encode — Compress data with the specified encoding zlib_get_coding_type — Returns the coding type used for output compression 用户评论: [#1]Robin Skoglund[2008-04-04 16:39:06] http://php.s575.com/1558.html
13.zlib:Zlib软件包包含zlib库,很多程序中的压缩或者解压缩函数Gitee 极速下载/zlib 加入Gitee 与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :) 免费加入 已有帐号?立即登录 此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。 原始仓库:https://github.com/madler/zlib develop 克隆/下载 https://gitee.com/mirrors/zlib/
14.zlib怎么用zlib好不好使用技巧zlib 软件类型: 用户评分: 软件类型: 553 KB 软件类型: 2023-06-13 鲁大师安全下载 zlib 1.2.8.tar.gz是目前所有平台上最新最稳定的zlib的版本,如果有想使用这款zlib-1.2.8.tar.gz版的朋友马上下载使用吧,该zlib-1.2.8.tar.gz包含源码。基本简介zlib是提供数据压缩用 https://xiazai.zol.com.cn/baike/548335.shtml
15.Zlib(x86Download zlib(x86-64) packages for AlmaLinux, Amazon Linux, CentOS, Fedora, Mageia, Oracle Linux, Rocky Linuxhttps://pkgs.org/download/zlib(x86-64)
16.PHP:Zlib函数教程手册使用说明PHP手册中文版目录https://www.hashspace.cn/php/ref.zlib.php
17.Zlib和Zstd性能对比评测在协议这块,服务器用压缩API的频率远大于解压缩API频率, 在由zlib替换了level=3的Zstd后,压缩效率会大幅提高,表现也更加稳定,压缩率会有小幅降低。 在level的调整方面,随着level增大,压缩率会有小幅提高,但压缩效率会大幅降低,得不偿失,所以保持默认值3或者2是比较合适的。如果追求压缩/解压缩效率则选择2,追求压https://developer.aliyun.com/article/1376770
18.Node.jsAPI详解之zlib模块用法分析javascript技巧这篇文章主要介绍了Node.js API详解之 zlib模块用法,结合实例形式分析了Node.js API中zlib模块基本功能、函数使用方法与操作注意事项,需要的朋友可以参考下+ 目录 GPT4.0+Midjourney绘画+国内大模型 会员永久免费使用!【 如果你想靠AI翻身,你先需要一个靠谱的工具!】 本文实例讲述了Node.js API详解之 zlib模块用法https://www.jb51.net/article/186821.htm
19.理解和使用zlib库我的个人救赎Que'sC++Studio0. 很多年以前我曾经写过一篇文章(http://blog.csdn.net/querw/article/details/1452041)简单介绍 zlib 的使用方法,老实说当时自己都不是很明白 zlib 是怎么回事,现在想起来那个时候年轻嘛,胆子大,脸皮厚有时候想到自己这样一篇半吊子的东西在网络上传播,心不自安,希望用一篇新的文章救赎少不更事的无知. http://www.cppblog.com/querw/archive/2016/06/02/213639.aspx
20.理解和使用zlib库http://blog.csdn.net/querw/article/details/51569274 原理部分 略,详见原文 示例如下: #include<stdio.h>#include<string.h>#include<assert.h>extern"C"{#include"zlib.h"}#pragmacomment(lib, "zlib.lib")intdump_buffer(constBytef*buf,size_t len){for(size_t i=0;i<len;++i){printf("%02x"https://www.jianshu.com/p/37f4dc01987f
21.zlib1.2.3So for those who have read zlib.h (a few times), and would like further edification, below is an annotated example in C of simple routines to compress and decompress from an input file to an output file using deflate() and inflate() respectively. The annotations are interspersed between https://www.ymcn.org/169555.html
22.ubuntuzlib安装51CTO博客已为您找到关于ubuntu zlib 安装的相关内容,包含IT学习相关文档代码介绍、相关教程视频课程,以及ubuntu zlib 安装问答内容。更多ubuntu zlib 安装相关解答可以来51CTO博客参与分享和学习,帮助广大IT技术人实现成长和进步。https://blog.51cto.com/topic/ubuntu-zlib-anzhuang.html
23.zlib1.dll下载丢失zlib1.dll修复工具下载zlib1.dll是著名的ZLIB压缩解压缩组件,很多软件都带的有,而一些软件运行时需要zlib1.dll,系统中没有的话则会出现计算机中丢失zlib1.dll的问题,以下小编分享了zlib1.dll文件下载并附上修复方法。 zlib1.dll 64位&32位安装方法: 如果您的系统提示“找不到zlib1.dll”或“zlib1.dll缺失”或者“zlib1.dll错误”http://www.winwin7.com/soft/xtbd-248.html
24.linux中的zlib作用腾讯云开发者社区转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) zlib库是一个强大的通用的开源压缩库,用途比较广,在windows下能够很容易的编译或者拿到编译成功的二进制文件但是linux下的比较少,本文记录一下如何编译。 zlib官方网站:http://www.zlibhttps://cloud.tencent.com/developer/information/linux%E4%B8%AD%E7%9A%84zlib%E4%BD%9C%E7%94%A8-article
25.ubuntu中zlib安装的方法是什么如果需要在隔离的环境中安装zlib库,可以使用Docker容器来进行安装,需要安装Docker并创建一个基于Ubuntu的容器,进入容器并按照上述方法之一安装zlib库,安装完成后,就可以在容器中的程序中使用zlib库了。 无论使用哪种方法安装zlib库,都需要确保已经安装了相关的依赖库和工具,在使用编译源代码的方式安装时,需要确保已经安装https://www.kdun.com/ask/634581.html
26.zlib这是想要获得广大中国书民的支持而不得嘛哈哈另外有点好奇的是,zlib也接受实体图书捐赠,而且接受范围挺大的(指种类,除了习题书之类的不要 阿呆 就是不知道捐赠之后图书会被怎么处理,能得到什么样妥善的安置,这些实体书最后怎么形成对zlib本身的捐助毕竟实体书想要流通还是挺困难的,没有像图书馆这样的场地摆放并且提供借阅服务的话,不知道捐助的意义在哪https://www.douban.com/group/topic/304234266/