zlib库compress和uncompress函数的使用方法

用C语言简单演示如何借助zlib库实现文件的压缩和解压缩 不少网友读完zlib库compress和uncompress函数的使用方法这篇文章之后,仍然无法独立完成简单的文件压缩和解压缩功能,为此作者在这里追加这样的演示代码。问题的根源在于这些网友对于字符串和字节流的概念非常的模糊,对文本文件和二进制文件的区别常常模棱两可,其实字节流可以表示所有的数据,二进制文件才是任何文件的本质。字节流是一个字节接一个字节,并没有结束符号,所以需要给它一个长度信息。二进 阅读详情
AI摘要

本文介绍使用zlib库进行数据压缩与解压缩的方法。通过示例代码详细展示了如何利用compress和uncompress函数处理字符串数据,包括正确计算缓冲区大小、处理字符串结束符等问题。

zlib(http://zlib.net/)提供了简洁高效的In-Memory数据压缩和解压缩系列API函数,很多应用都会用到这个库,其中compress和uncompress函数是最基本也是最常用的。不过很奇怪的是,compress和uncompress函数尽管已经非常的简单,却仍然有不少人用得不好,其实归根结底还是在于有些事情没有弄明白,这里大家先看下面的代码。

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <zlib.h>

int main(int argc, char* argv[])
{
	char text[] = "zlib compress and uncompress test\nturingo@163.com\n2012-11-05\n";
	uLong tlen = strlen(text) + 1;	/* 需要把字符串的结束符'\0'也一并处理 */
	char* buf = NULL;
	uLong blen;

	/* 计算缓冲区大小,并为其分配内存 */
	blen = compressBound(tlen);	/* 压缩后的长度是不会超过blen的 */
	if((buf = (char*)malloc(sizeof(char) * blen)) == NULL)
	{
		printf("no enough memory!\n");
		return -1;
	}

	/* 压缩 */
	if(compress(buf, &blen, text, tlen) != Z_OK)
	{
		printf("compress failed!\n");
		return -1;
	}

	/* 解压缩 */
	if(uncompress(text, &tlen, buf, blen) != Z_OK)
	{
		printf("uncompress failed!\n");
		return -1;
	}

	/* 打印结果,并释放内存 */
	printf("%s", text);
	if(buf != NULL)
	{
		free(buf);
		buf = NULL;
	}

	return 0;
}
zlib处理的对象是Bytef*字节流,很多人遇到字符串就会混淆了,其实很简单,字节流是没有结束符的,需要配备长度信息,所以处理字符串的时候需要把结束符也当成一个普通的字节,这样计算长度的时候也需要算它一份。另外绝大部分人都想动态分配缓冲区,也就是说需要多少再给多少,其实zlib本身有提供compressBound函数用于计算压缩后缓冲区长度的上限值,不需要额外再设计一些不适当的预测算法,不过解压缩的时候没有提供长度的预测,由于compress和uncompress一般都是成对使用的,预先保存好原文的长度即可。

QT(qCompress和qUncompress)与zlib(compress和uncompress)相互调用 通过对qCompress和compress压缩的数据进行打印,可以知道qCompress比compress的数据长四个字节 阅读详情

相关推荐

C++ 使用ZLIB库实现目录压缩与解压

C++ 使用ZLIB库实现目录压缩与解压

森明帮大于黑虎帮的博客 6597

zlib库compress和uncompress函数

1、compress函数 /* Compresses the source buffer into the destination buffer.sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size of the destination buffe...

$好记性还是要多记录$ 6802

在linux系统中使用zlib库 压缩解压 文件(C++)

在这两个函数中,我们使用了zlib库的compress和uncompress函数来处理压缩和解压缩。压缩时,我们读取了文件内容到字符串中,然后调用compress进行压缩。解压缩时,我们读取了压缩文件的内容到字符串中,然后调用uncompress进行解压缩。最后,我们将结果写入到输出文件中。请确保在编译时链接zlib库,例如使用g++ -o my_program my_program.cpp -lz命令进行编译和链接。

啊渊的专栏 462

compress 和 uncompress 的使用

解压 uncompress。压缩 compress。

m0_61365333的博客 909

linux下Zlib的安装与使用

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

九师兄 13万+

Zlib压缩解压工具

Zlib压缩解压工具,第一次用请先运行reg.bat注册组件

使用zlib库里的compress函数与uncompress函数

在第一次使用uncompress函数的时候,就把我弄得很老火,最后错误的原因现在具体是什么也没有弄明白,特别无语。 compress函数与uncompress函数可以跨平台。在Linux上编译链接时别忘了加上 -lz。 使用时一定要注意的地方: compress函数与uncompress函数的第二个参数,一定是要重新定义一个变量才能保证它不会出现错。当时 我的不管怎么弄程序,就一直提示

u012654882的专栏 6340

ERA5气象数据下载与解压全攻略:Python脚本一键搞定(附错误处理技巧)

本文提供了一套完整的ERA5气象数据自动化处理方案,涵盖从CDS API配置、智能批量下载到高效解压与数据验证的全流程。重点介绍了如何通过Python脚本实现一键式数据下载与批量解压,并分享了实用的错误处理技巧与性能优化策略,帮助科研人员高效获取和处理大规模气象数据。

k8l9m0n的博客 337

zlib库介绍二:zlib库重要函数及使用过程解析

1.压缩函数 int compress

LuckyHanMo的博客 3261

Windows系统离线搭建PyTorch深度学习环境全攻略(CUDA+cudnn实战)

本文提供了一份在Windows系统下离线搭建PyTorch深度学习环境的完整实战指南。文章详细讲解了如何在没有网络连接的情况下,正确安装和配置CUDA、cudnn以及PyTorch,并构建独立的Python虚拟环境。重点强调了版本依赖关系的重要性,并提供了从驱动准备到环境验证的每一步操作,旨在帮助用户高效、稳定地部署可复用的GPU深度学习开发环境。

table的专栏 579

Unity URP半透明物体渲染避坑指南:双面渲染与深度写入的实战技巧

本文深入探讨了Unity URP中半透明物体自交叠渲染问题的核心根源与解决方案。针对模型自身交叠导致的排序错误,文章提供了双面渲染与深度写入两种实战技巧,详细分析了其实现原理、性能开销及适用场景,帮助开发者根据项目需求选择最优方案,有效提升玻璃、水体等材质的视觉表现。

sunny的博客 545

C++内嵌代码使用压缩的方法(compress和uncompress函数)需要有zlib,编译时加-lz

转自:http://blog.youkuaiyun.com/Solstice/archive/2003/04/04/2061.aspx 以下全文转: 使用zlib库里的compress函数与uncompress函数 zlib 是通用的压缩库,提供了一套 in-memory 压缩和解压函数,并能检测解压出来的数据的完整性(integrity)。zlib也支持读写 gzip (.gz) 格式

sinat_26306661的专栏 1137

深度伪造检测实战:轻量级频域特征 pipeline 部署指南

深度伪造检测(deepfake detection)是多媒体内容安全的核心技术,其本质是通过建模生成式篡改在像素与频域留下的微弱异常痕迹。传统端到端大模型虽在标准数据集上表现优异,却因训练域与真实场景失配、计算开销高、缺乏可解释性而难以落地。本文聚焦于工程可复现的实践路径,提出‘人脸定位→频域伪造特征提取(Xception-FCN + Frequency-Aware Masking)→轻量分类决策’三段式解耦架构,兼顾精度、延迟与可解释性。该方案已在边缘设备(Jetson Orin NX)实现单帧<48ms

weixin_33437929的博客 306

zlib库 安装与使用

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

Windeal 5万+

kaggle项目:纽约出租车行程时间NYC Taxi Trip Duration

纽约出租车形成时间预测(NYC Taxi Trip Duration)是Kaggle中的一个Playground竞赛。比赛数据集基于2016年纽约市黄色出租车行程记录数据,需要建立一个模型,根据单个行程属性,预测测试集中每次行程的持续时间。Kaggle项目模型XGBoost,评价指标RMSLE。

weixin_42113929的博客 2790

数据中心——Vxlan基本概念1

东西流量指的就是横向流量-------例如:服务器与服务器之间交换流量南北流量指的就是纵向流量-------例如:客户端和服务器之间的流量以下主要是讲解业务平面的网络架构(一般业务平面就需要用到专用的数据中心交换机)

m0_49864110的博客 1万+

zlib 库的使用

1、zlib 介绍 zlib 是通用的压缩库,提供了一套内存内压缩和解压函数,并能检测解压出来的数据的完整性。zlib 也支持读写 gzip (.gz) 格式的文件。

陈嘉怡的专栏 4932

SPI为什么不需要加上拉电阻

大家好,我是记得诚。I2C因为其开漏的结构,无法输出高电平,所以外部加上拉电阻。我们在使用SPI的时候,发现是不需要加上拉电阻的。主要因为SPI多为推挽的结构,推挽电路,高低电平都可以输出,所以外部不需要加上拉电阻。推挽电路可以用2个三极管或者2个MOS管搭建而成。

记得诚 2621

zlib.h 中的compress 和 uncompress

头文件 zlib.h int compress (Bytef * dest , uLongf * destLen, constt Bytef * source , uLongf sourceLen) zib的压缩函数,将source处sourceLen个字节进行压缩,放到dest指向的内存,把压缩后的长度存入destLen指向的地址中。调用前destLen表示dest缓冲区,调用后destLe...

weixin_33692284的博客 286

深度学习之目标检测--Pytorch实战

只需要能看懂python代码,就能最快入门深度学习---目标检测。目标检测简单的玩玩儿还行,模型调优,调参,还需要一定的数学功底。通过代码来实现卷积,池化,非线性激活,正则化,归一化,能让人减少对大量数学公式的敬畏,手写神经网络也是考研复试中上机考试的压轴题,掌握搭建神经网络和如何训练模型是需要掌握的基础的

需要远程指导仿真实验、代码有问题的,请后台私信或者关注公众号 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

zlib库使用简单讲解

&#13; &#13; &#13; &#13; &#13; &#13; &#13; 1.zlib库简介   zlib 是通用的压缩库,提供了一套 in-memory 压缩和解压函数,并...

Linux知识积累 4万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: 用C语言检测文本编码的方法
下一篇: 用C语言实现Sieve of Atkin算法
图灵狗
博客等级 码龄15年 2361粉丝 23原创
评论 25
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值