zlib简单使用说明(转)
1.背景:项目需要把protobuf文件压缩后再传到MQTT,于是就想到了zlib
2.zlib是提供数据压缩用的函式库,此函式库为自由软件。
3.网上下载zlib压缩包,执行如下命令,函数库就可使用
$tar -xvzf zlib-1.2.3.tar.gz
$./configure
$make
$sudo make install
注:执行上面命令后,zlib动态库已是系统共享库,在系统中任何位置都可调用此库
测试代码:
Makefile:
- all: test.c
- gcc -Wall -o test test.c -lz
- clean:
- rm -rf *.o test
注意到,我们用-lz加入了zlib库
test.c
- #include <stdio.h>
- #include <zlib.h>
- int main()
- {
- /* 原始数据 */
- unsigned char strSrc[] = "hello world! aaaaa bbbbb ccccc ddddd 中文测试 yes";
- unsigned char buf[1024] = {0};
- unsigned char strDst[1024] = {0};
- unsigned long srcLen = sizeof(strSrc);
- unsigned long bufLen = sizeof(buf);
- unsigned long dstLen = sizeof(strDst);
- printf("Src string:%s\nLength:%ld\n", strSrc, srcLen);
- /* 压缩 */
- compress(buf, &bufLen, strSrc, srcLen);
- printf("After Compressed Length:%ld\n", bufLen);
- /* 解压缩 */
- uncompress(strDst, &dstLen, buf, bufLen);
- printf("After UnCompressed Length:%ld\n",dstLen);
- printf("UnCompressed String:%s\n",strDst);
- return 0;
- }
4.
运行结果如下所示:

呵呵,只压缩掉了一个字节。
我们用到了两个函数:compress和uncompress:
压缩:
int compress(unsigned char * dest, unsigned long * destLen, unsigned char * source, unsigned long sourceLen);
dest:压缩后数据保存的目标缓冲区
destLen:目标缓冲区的大小(必须在调用前设置,并且它是一个指针)
source:要压缩的数据
sourceLen:要压缩的数据长度
compress()函数成功返回Z_OK,如果内存不够,返回Z_MEM_ERROR,如果目标缓冲区太小,返回Z_BUF_ERROR
解压缩:
int uncompress(unsigned char * dest, unsigned long * destLen, unsigned char * source, unsigned long sourceLen);
dest:解压后数据保存的目标缓冲区
destLen:目标缓冲区的大小(必须在调用前设置,并且它是一个指针)
source:要解压的数据
sourceLen:要解压的数据长度
uncompress()函数成功返回Z_OK,如果内存不够,返回Z_MEM_ERROR,如果目标缓冲区太小,返回Z_BUF_ERROR,如果要解压的数据损坏或不完整,返回Z_DATA_ERROR。
zlib简单使用说明(转)的更多相关文章
- Oracle 中 union 和union all 的简单使用说明
1.刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟.今天我们来了解一下union和union all的简单使用说明.Union(union all): 指令的目的是将两个 S ...
- struts 标签<s:ierator>的简单使用说明
struts 标签<s:ierator>的简单使用说明,只显示<s:ierator> 的前6条数据 <s:iterator value="lstVisitor& ...
- Spring依赖注入 --- 简单使用说明
Spring依赖注入 --- 简单使用说明 本文将对spring依赖注入的使用做简单的说明,enjoy your time! 1.使用Spring提供的依赖注入 对spring依赖注入的实现方法感兴趣 ...
- Linux下源码安装ffmpeg及ffmpeg的简单使用说明
一.编译安装 ffmpeg在安装时依赖的包和版本都很让人头疼,不同编译环境也各不相同.公司之前封装了一个又各种出错. 其实办法很简单,就是到官网一步一步按着做就行了:http://trac.ffmpe ...
- Facebook开源Zstandard新型压缩算法代替Zlib 简单使用
简介 Zstandard(缩写为Zstd)是由Facebook的Yann Collet开发的一个无损数据压缩算法.Zstandard在设计上与DEFLATE(.zip.gzip)算法有着差不多的压缩比 ...
- zlib 简单封装
下列代码用于压缩和解压字符串,使用标准库string.实现了对zlib的简单封装. #pragma once #include <boost/noncopyable.hpp> #inclu ...
- Android自定义属性简单使用说明
原创文章,转载请注明出处:http://www.cnblogs.com/baipengzhan/p/Android_attrs.html 本文从实用角度说明Android自定义属性的基本使用流程,清晰 ...
- SDL结合QWidget的简单使用说明(2)
上篇主要讲了针对yv12流数据的渲染,但有时候我们显示视频还要求加一些信息,比如头像,昵称等等.一般的想法是在渲染窗口之上做一个小控件来负责: 但是很遗憾,你会发现你的控件被SDL的渲染完全遮住了,渲 ...
- SDL结合QWidget的简单使用说明
SDL(Simple DirectMeida Layer)是一个简单的封装媒体库,功能主要涉及了相关于OpenGL或者DirectX的显卡硬件功能和一些鼠标,键盘等外设访问.这里主要只说明一下它的渲染 ...
随机推荐
- 动态dp
题解: 首先这类题目本身是一个dp/树形dp 然后带上了修改(ddp) 为了权衡查询和修改的时间,我们采用树剖来维护 假设我们能够对每个点维护除了重儿子之外的信息 那么我们的修改只需要修改log个节点 ...
- 关于jmeter读取CSV文件的详细设置
jmeter 读取excel数据使用的方法是使用Jmeter CSV Data Set Config参数化 但是将excel文件保存成csv格式后,jmeter读取后返回的数据总是出现乱码问题, 以下 ...
- Beta(7/7)
鐵鍋燉腯鱻 项目:小鱼记账 团队成员 项目燃尽图 冲刺情况描述 站立式会议照片 各成员情况 团队成员 学号 姓名 git地址 博客地址 031602240 许郁杨 (组长) https://githu ...
- python学习:输入中文
输入中文 python2 输入中文:#!-*- coding:utf-8 -*-(或者#coding:utf-8)例如: msg = u"我爱北京天安门!" print msg p ...
- JS_高程8.BOM window对象(1)
1.全局作用域 var age = 14; window.coloer = "pink"; console.log(delete window.age);//false 使用var ...
- ECMA Script 6_简单介绍
ECMAScript 6 ECMA 组织 前身是 欧洲计算机制造商协会 指定和发布脚本语言规范,标准在每年的 6 月份正式发布一次,作为当年的正式版本 这样一来,就不需要以前的版本号了,只要用年份标记 ...
- QVM 实操记 - 18.12.28
视频回放地址:https://i.iamlj.com/mp4/QVM-IMC-12.27-1080P.mp4 目录 目录 常规开发部署流程 准备工作 开发准备 网站部署 操作步骤 重装系统 LANP环 ...
- MVC 向页面传值方式总结(1)
ViewData传值. HomeController.cs Co de: public ActionResult Index() { ViewData["Title" ...
- SSM 记录
前言:本过程从0开始,先是导入最核心的jar包,然后随着ssm中的功能实现,打包===>启动===>报错,一步步解决问题,增加额外的必须的jar包来熟悉ssm 1.导包(核心包) myba ...
- centos安装make
CentOS 中无法使用make,make install 命令 提示错误:make: command not found make是gcc的编译器,一定要安装 1.安装: yum -y instal ...