Zlib是一种免费且通用的压缩库,由于Zlib压缩效果比LZW好,而且解压缩速度快,更重要的是商业软件中使用Zlib不需要缴纳版权费,所以很多游戏都使用Zlib压缩资源文件。

Zlib是由Jean-loup Gailly 和 Mark Adler共同编写完成的压缩库,Zlib是开源的,而且从Zlib的官方网站http://www.zlib.net/上可以下载到不同平台和编译器下的源代码实现。

Zlib联合使用LZ77算法和Huffman哈夫曼树来实现数据压缩和数据解压。

zlib源码http://download.csdn.net/detail/huangyuancao/7760901

void MainWindow::on_pushButton_clicked()
{
FILE* File_src;
FILE* File_compress;
FILE* File_uncompress;
unsigned long len_src;
unsigned long len_compress;
unsigned long len_uncompress = MaxBufferSize;
unsigned char *buffer_src = new unsigned char[MaxBufferSize];
unsigned char *buffer_compress = new unsigned char[MaxBufferSize];
unsigned char *buffer_uncompress = new unsigned char[MaxBufferSize];
File_src = fopen("src.txt","r");
File_compress = fopen("compress.txt","w");
File_uncompress = fopen("uncompress.txt","w");
//compress
len_src = fread(buffer_src,sizeof(char),MaxBufferSize-,File_src);
compress(buffer_compress,&len_compress,buffer_src,len_src);
fwrite(buffer_compress,sizeof(char),len_compress,File_compress);
qDebug() << "normal zlib:" ;
qDebug() << "src:\n" << buffer_src << ",length:" << len_src ;
qDebug() << "compress:\n" << buffer_compress << ",length:" << len_compress ;
//uncompress
uncompress(buffer_uncompress,&len_uncompress,buffer_compress,len_compress);
fwrite(buffer_uncompress,sizeof(char),len_uncompress,File_uncompress);
qDebug() << "uncompress:\n" << buffer_uncompress << ",length:" << len_uncompress;
fclose(File_src);
fclose(File_compress);
fclose(File_uncompress);
}
void MainWindow::on_pushButton_2_clicked()
{
QByteArray src;
src.append("中华人民共和国,china mobile,123456 ");
unsigned long len_compress;
unsigned long len_uncompress;
unsigned char *buffer_compress = new unsigned char[MaxBufferSize];
unsigned char *buffer_uncompress = new unsigned char[MaxBufferSize];
compress(buffer_compress,&len_compress,(Bytef*)src.data(), src.length());
uncompress(buffer_uncompress,&len_uncompress,buffer_compress,len_compress);
qDebug() << "qt zlib:" ;
qDebug() << "src:\n" << src.data() << ",length:" << src.size() ;
qDebug() << "compress:\n" << buffer_compress << ",length:" << len_compress ;
qDebug() << "uncompress:\n" << buffer_uncompress << ",length:" << len_uncompress ;
}

执行效果:

参考http://www.cnblogs.com/chuncn/archive/2011/03/23/1992481.html

qt调用zlib实例http://download.csdn.net/detail/huangyuancao/7760919

qt 调用zlib压缩与解压缩功能的更多相关文章

  1. golang zlib 压缩,解压缩

    package main import ( "bytes" "compress/zlib" "fmt" "io" &qu ...

  2. C#用Zlib压缩或解压缩字节数组

    /// <summary> /// 复制流 /// </summary> /// <param name="input">原始流</par ...

  3. 使用ICSharpCode.SharpZipLib.Zip实现压缩与解压缩

    使用开源类库ICSharpCode.SharpZipLib.Zip可以实现压缩与解压缩功能,源代码和DLL可以从http://www.icsharpcode.net/OpenSource/SharpZ ...

  4. Python3 压缩与解压缩(zlib / gzip / bz2 / lzma / zipfile / tarfile)

    本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/72672703 以下代码以Python3.6.1为例 L ...

  5. Qt之zip压缩/解压缩(QuaZIP)

    摘要: 简述 QuaZIP是使用Qt/C++对ZLIB进行简单封装的用于压缩及解压缩ZIP的开源库.适用于多种平台,利用它可以很方便的将单个或多个文件打包为zip文件,且打包后的zip文件可以通过其它 ...

  6. C#调用 ICSharpCode.SharpZipLib.Zip 实现解压缩功能公用类

    最近想用个解压缩功能 从网上找了找 加自己修改,个人感觉还是比较好用的,直接上代码如下 using System; using System.Linq; using System.IO; using ...

  7. 【13】MD5编码、Zlib压缩解压缩

    1.MD5加密 /// <summary> /// 使用MD5加密算法 /// </summary> /// <param name="md5MessageSt ...

  8. linux下各种文件格式的压缩以及解压缩命令

    From : http://blog.csdn.net/mu0206mu/article/details/17732857 -------------------------------------- ...

  9. Jcompress: 一款基于huffman编码和最小堆的压缩、解压缩小程序

    前言 最近基于huffman编码和最小堆排序算法实现了一个压缩.解压缩的小程序.其源代码已经上传到github上面: Jcompress下载地址 .在本人的github上面有一个叫Utility的re ...

随机推荐

  1. hostname命令

    hostname命令用于显示和设置系统的主机名称.环境变量HOSTNAME也保存了当前的主机名.在使用hostname命令设置主机名后,系统并不会永久保存新的主机名,重新启动机器之后还是原来的主机名. ...

  2. 冒烟测试(smoke testing)

    冒烟测试(smoke testing),就是开发人员在个人版本的软件上执行目前的冒烟测试项目,确定新的程序代码不出故障.冒烟测试的对象是每一个新编译的需要正式测试的软件版本,目的是确认软件基本功能正常 ...

  3. Python缩进与if语句 空格的魅力

    缩进 Python最具特色的是用缩进来标明成块的代码.我下面以if选择结构来举例.if后面跟随条件,如果条件成立,则执行归属于if的一个代码块. 先看C语言的表达方式(注意,这是C,不是Python! ...

  4. ado_基本连接操作【四】

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data. ...

  5. Linux 中 MySQL常用命令

    一. 数据库登录mysql -uroot -p二..退出数据库quit 和 exit或ctrl + d三.数据库操作1. 查看所有数据库 show databases;2. 查看当前使用的数据库sel ...

  6. DOCTYPE的作用以及标准模式和兼容模式的区别

    <!doctype>声明必须处于HTML文档的头部,在<html>标签之前,告知浏览器的解析器用什么文档标准解析这个文档.DOCTYPE不存在或格式不正确会导致文档以兼容模式呈 ...

  7. MySQL学习(八)

    连接查询 1 集合的特点:无序性,唯一性 集合的运算:求并集,求交集,求笛卡尔积 表和集合的关系 一张表就是一个集合,每一行就是一个元素 疑问:集合不能重复,但我有可能两行数据完全一样 答:mysql ...

  8. 牛客小白月赛7 B 自杀游戏

    自杀游戏 思路: sg函数 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include&l ...

  9. Python&HDF5目录

    最近一直没更新python&量化的博客,是因为忙于看HDF5的书,写VNPY框架,学scrapy爬虫. 本来写博客的目的就是为了当作一种教材,当遇到不会的问题过来找答案. 对于HDF5下面这本 ...

  10. lombok插件:Data自动get/set方法, Slf4j实现Logger的调用

    lombok插件:Data自动get/set方法, Slf4j实现Logger的调用 lombok.Data import lombok.Data; import org.hibernate.anno ...