qt 调用zlib压缩与解压缩功能
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压缩与解压缩功能的更多相关文章
- golang zlib 压缩,解压缩
package main import ( "bytes" "compress/zlib" "fmt" "io" &qu ...
- C#用Zlib压缩或解压缩字节数组
/// <summary> /// 复制流 /// </summary> /// <param name="input">原始流</par ...
- 使用ICSharpCode.SharpZipLib.Zip实现压缩与解压缩
使用开源类库ICSharpCode.SharpZipLib.Zip可以实现压缩与解压缩功能,源代码和DLL可以从http://www.icsharpcode.net/OpenSource/SharpZ ...
- Python3 压缩与解压缩(zlib / gzip / bz2 / lzma / zipfile / tarfile)
本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/72672703 以下代码以Python3.6.1为例 L ...
- Qt之zip压缩/解压缩(QuaZIP)
摘要: 简述 QuaZIP是使用Qt/C++对ZLIB进行简单封装的用于压缩及解压缩ZIP的开源库.适用于多种平台,利用它可以很方便的将单个或多个文件打包为zip文件,且打包后的zip文件可以通过其它 ...
- C#调用 ICSharpCode.SharpZipLib.Zip 实现解压缩功能公用类
最近想用个解压缩功能 从网上找了找 加自己修改,个人感觉还是比较好用的,直接上代码如下 using System; using System.Linq; using System.IO; using ...
- 【13】MD5编码、Zlib压缩解压缩
1.MD5加密 /// <summary> /// 使用MD5加密算法 /// </summary> /// <param name="md5MessageSt ...
- linux下各种文件格式的压缩以及解压缩命令
From : http://blog.csdn.net/mu0206mu/article/details/17732857 -------------------------------------- ...
- Jcompress: 一款基于huffman编码和最小堆的压缩、解压缩小程序
前言 最近基于huffman编码和最小堆排序算法实现了一个压缩.解压缩的小程序.其源代码已经上传到github上面: Jcompress下载地址 .在本人的github上面有一个叫Utility的re ...
随机推荐
- 访问spring接口一定要用.do么?
不是,该后缀是在web.xml里配置的,可以随便更改 <servlet-mapping> <servlet-name>SpringMVC</servlet-name> ...
- 用R创建Word和PowerPoint文档--转载
https://www.jianshu.com/p/7df62865c3ed Rapp --简书 Microsoft的Office软件在办公软件领域占有绝对的主导地位,几乎每个职场人士都必须掌握Wor ...
- 理解 Redis(3) - 字符串值
正如前面所讲的, redis 的数据结构就是一系列的键值对键 -> printable ASCII (可打印的 ASCII 码, 最大值是 512MB)值 -> Primitives (基 ...
- idea创建web聚合工程(2)
参考文档: intelj idea 创建聚合项目(典型web项目,包括子项目util.dao.service) 使用IntelliJ IDEA创建Maven聚合工程.创建resources文件夹.ss ...
- node项目配置成nginx启动
node项目配置成nginx启动 1.新建ant.conf upstream antNodeJs{ server 127.0.0.1:8000; keepalive 64; } server { li ...
- oracle 12c创建可插拔数据库(PDB)及用户
由于oracle 12c使用了CDB-PDB架构,类似于docker,在container-db内可以加载多个pluggable-db,因此安装后需要额外配置才能使用. 一.修改listener.or ...
- 由table理解display:table-cell
转载自:https://segmentfault.com/a/1190000007007885 table标签(display:table) 1) table可设置宽高.margin.border.p ...
- HDU 1241 连通块问题(DFS入门题)
Input The input file contains one or more grids. Each grid begins with a line containing m and n, th ...
- MYSQL常用函数(格式化函数)
DATE_FORMAT(date,fmt) 依照字符串fmt格式化日期date值 FORMAT(x,y) 把x格式化为以逗号隔开的数字序列,y是结果的小数位数 INET_ATON(ip) 返 ...
- AtCoder Grand Contest 027 C ABland Yard
ABland Yard 思路: 用了类似拓扑排序的方法来判环 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optim ...