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 ...
随机推荐
- css display属性
C:内联元素加上display:block后被块级化.块级元素一般是其他元素的容器,可容纳内联元素和其他块状元素,块级元素排斥其他元素与其位于同一行,width和height起作用.因此,可以定义其宽 ...
- new和malloc的用法和区别
从以下几个方面总结下new和malloc的区别: 参考博客: https://blog.csdn.net/nie19940803/article/details/76358673 https://bl ...
- 转 代码修改buildoption
using System;using System.IO;using UnityEditor;using UnityEngine; public class BuildPlayer : Scripta ...
- Codeforces 781B. Innokenty and a Football League
题目链接:http://codeforces.com/contest/781/problem/B 去tmd 2-SAT 直接贪心就可以过去了,优先选择第二种情况. 然而....可以被叉掉(数据水了) ...
- ubuntu 安装pip3 遇到Ignoring ensurepip failure: pip 8.1.1 requires SSL/TLS错误
3.5版本之后的会自动安装pip,所以我们直接从官网下载3.5.2,下载地址:https://www.python.org/ftp/python/ 下载以后,可以用命令解压,也可以右键进行解压, ta ...
- Qt532.QString_填充字符
1.代码: void MainWindow::on_pushButton_clicked() { QString str = "; QString str01 = str.leftJusti ...
- 力扣(LeetCode) 35. 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 输入: [1,3,5,6], 5 输 ...
- 力扣(LeetCode) 852. 山脉数组的峰顶索引
我们把符合下列属性的数组 A 称作山脉: A.length >= 3 存在 0 < i < A.length - 1 使得A[0] < A[1] < ... A[i-1] ...
- 《剑指offer》第五十三题(0到n-1中缺失的数字)
// 面试题53(二):0到n-1中缺失的数字 // 题目:一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字 // 都在范围0到n-1之内.在范围0到n-1的n个数字中有且只有一个数 ...
- lua --- 函数的可变参数
主要掌握: 1>虚变量 --- 一个下划线 2>lua将函数的可变参数放在一个叫 arg 的表中,除了参数以外,arg表中还有一个域n表示参数的个数. do function fun(x, ...