使用zlib库进行数据压缩、解压缩
2009-11-10 14:28
375 查看
本文来自:http://www.shineblog.com/user1/13950/archives/2008/934622.shtml
出由个人好奇,研究一下86版输入法安装程序,引发了一系列的变化.首先是其安装程序中的
LZOpenFile函数,函数的作用已经了解过了,只是没有实验对象,所以还得找个,压缩好的包来测试一下,最后先找到zlib.来试试看.顺便还能学
一些其中的东西.以下内容均是转自他处.
什么是zlib? 官网上有如下说明,自己看吧
zlib
is designed to be a free, general-purpose, legally unencumbered -- that
is, not covered by any patents -- lossless data-compression library for
use on virtually any computer hardware and operating system. The zlib
data format is itself portable across platforms.
那么如何使用它来进行数据压缩呢?
首先,去http://www.zlib.net/
下载最新的Release版本,压缩完解压缩到一个文件目录
如果你在Linux下工作,那么编译前,请先看看目录下面的MakeFile文件,用文本打开(命令行下less),可以看到里面一些句子:
# To compile and test, type:
# ./configure; make test
# The call of configure is optional if you don't have special requirements
# If you wish to build zlib as a shared library, use: ./configure -s
# To install /usr/local/lib/libz.* and /usr/local/include/zlib.h, type:
# make install
# To install in $HOME instead of /usr/local, use:
# make install prefix=$HOME
很简单,要编译安装linux下的静态库(.a)文件,那么在命令行下输入
./configure;make;make
install;就可以了,而如果要编译安装共享库(.so,类似windows下面的.dll),那么在命令行下输入 ./configure
-s;make;make install;如果出现的都是Yes,那么就成功了。
在windows下编译将更简单,打开目录下projects/visualc6下的zlib.dsw,用VC6打开,然后在Build菜单下,选择Configurations,然后选择你要生成的类型就好了。vs2003/vs2005,下类似。
使用zlib,写一段简单的代码测试看看
#i nclude
<stdio.h>
#i nclude
"zlib.h"
int
main()
{
//原始数据
const
unsigned
char
strSrc[]="hello world!/n/
aaaaa bbbbb ccccc ddddd aaaaa bbbbb ccccc ddddd中文测试 中文测试/
aaaaa bbbbb ccccc ddddd aaaaa bbbbb ccccc ddddd中文测试 中文测试/
aaaaa bbbbb ccccc ddddd aaaaa bbbbb ccccc ddddd中文测试 中文测试/
aaaaa bbbbb ccccc ddddd aaaaa bbbbb ccccc ddddd中文测试 中文测试";
unsigned
char
buf[1024]={0},strDst[1024]={0};
unsigned
long
srcLen=sizeof
(strSrc),bufLen=sizeof
(buf),dstLen=sizeof
(strDst);
printf("Src string:%s/nLength:%d/n",strSrc,srcLen);
//压缩
compress(buf,&bufLen,strSrc,srcLen);
printf("/nAfter Compressed Length:%d/n",bufLen);
printf("Compressed String:%s/n",buf);
//解压缩
uncompress(strDst,&dstLen,buf,bufLen);
printf("/nAfter UnCompressed Length:%d/n",dstLen);
printf("UnCompressed String:%s/n",strDst);
return
0;
}
编译这段代码时要注意,假设你在windows下并使用静态库(.lib)连接,那么在
vc6下,需要把zlib.lib文件放到你的代码目录下,并把zlib.h、zconf.h加入到workspace中,并且设置项目属
性:project-settings-link-category选择input,然后在library
modules中的最后面输入一个空格和zlib.lib,并在lgnore libraries输入MSVCRT,原因是这个默认库和zlib会有冲突
!设置好以后直接编译运行就行了
如果你在linux下面,那么把zlib.h、zconf.h、libz.a、test.cpp都放在同一个目录,然后在命令行输入以下命令,然后运行./test看看吧
g++ *.cpp libz.a -g -o test
出由个人好奇,研究一下86版输入法安装程序,引发了一系列的变化.首先是其安装程序中的
LZOpenFile函数,函数的作用已经了解过了,只是没有实验对象,所以还得找个,压缩好的包来测试一下,最后先找到zlib.来试试看.顺便还能学
一些其中的东西.以下内容均是转自他处.
什么是zlib? 官网上有如下说明,自己看吧
zlib
is designed to be a free, general-purpose, legally unencumbered -- that
is, not covered by any patents -- lossless data-compression library for
use on virtually any computer hardware and operating system. The zlib
data format is itself portable across platforms.
那么如何使用它来进行数据压缩呢?
首先,去http://www.zlib.net/
下载最新的Release版本,压缩完解压缩到一个文件目录
如果你在Linux下工作,那么编译前,请先看看目录下面的MakeFile文件,用文本打开(命令行下less),可以看到里面一些句子:
# To compile and test, type:
# ./configure; make test
# The call of configure is optional if you don't have special requirements
# If you wish to build zlib as a shared library, use: ./configure -s
# To install /usr/local/lib/libz.* and /usr/local/include/zlib.h, type:
# make install
# To install in $HOME instead of /usr/local, use:
# make install prefix=$HOME
很简单,要编译安装linux下的静态库(.a)文件,那么在命令行下输入
./configure;make;make
install;就可以了,而如果要编译安装共享库(.so,类似windows下面的.dll),那么在命令行下输入 ./configure
-s;make;make install;如果出现的都是Yes,那么就成功了。
在windows下编译将更简单,打开目录下projects/visualc6下的zlib.dsw,用VC6打开,然后在Build菜单下,选择Configurations,然后选择你要生成的类型就好了。vs2003/vs2005,下类似。
使用zlib,写一段简单的代码测试看看
#i nclude
<stdio.h>
#i nclude
"zlib.h"
int
main()
{
//原始数据
const
unsigned
char
strSrc[]="hello world!/n/
aaaaa bbbbb ccccc ddddd aaaaa bbbbb ccccc ddddd中文测试 中文测试/
aaaaa bbbbb ccccc ddddd aaaaa bbbbb ccccc ddddd中文测试 中文测试/
aaaaa bbbbb ccccc ddddd aaaaa bbbbb ccccc ddddd中文测试 中文测试/
aaaaa bbbbb ccccc ddddd aaaaa bbbbb ccccc ddddd中文测试 中文测试";
unsigned
char
buf[1024]={0},strDst[1024]={0};
unsigned
long
srcLen=sizeof
(strSrc),bufLen=sizeof
(buf),dstLen=sizeof
(strDst);
printf("Src string:%s/nLength:%d/n",strSrc,srcLen);
//压缩
compress(buf,&bufLen,strSrc,srcLen);
printf("/nAfter Compressed Length:%d/n",bufLen);
printf("Compressed String:%s/n",buf);
//解压缩
uncompress(strDst,&dstLen,buf,bufLen);
printf("/nAfter UnCompressed Length:%d/n",dstLen);
printf("UnCompressed String:%s/n",strDst);
return
0;
}
编译这段代码时要注意,假设你在windows下并使用静态库(.lib)连接,那么在
vc6下,需要把zlib.lib文件放到你的代码目录下,并把zlib.h、zconf.h加入到workspace中,并且设置项目属
性:project-settings-link-category选择input,然后在library
modules中的最后面输入一个空格和zlib.lib,并在lgnore libraries输入MSVCRT,原因是这个默认库和zlib会有冲突
!设置好以后直接编译运行就行了
如果你在linux下面,那么把zlib.h、zconf.h、libz.a、test.cpp都放在同一个目录,然后在命令行输入以下命令,然后运行./test看看吧
g++ *.cpp libz.a -g -o test
相关文章推荐
- 在Python中使用zlib模块进行数据压缩的教程
- 使用Zlib对内存流及标准输入流进行压缩与解压缩
- Facebook开源时间序列内存数据库Beringei,追求极致压缩率——如果是int根据大多数时间序列中的值与相邻数据点相比并没有显著的变化,只要使用XOR将当前值与先前值进行比较,然后存储发生变化的比特。最终,该算法将整个数据集至少压缩了90%
- C#:SevenZipSharp使用7z.dll来进行压缩与解压缩
- 使用JAVA进行ZIP格式的压缩与解压缩
- Java使用GZIP进行压缩和解压缩(GZIPOutputStream,GZIPInputStream)
- 使用压缩池对读取自标准的谁的数据进行压缩,然后将其写到标准输出
- 使用ASIHTTPRequest的ASIDataCompressor与ASIDataDecompressor进行gzip压缩与解压缩,出现的问题
- 使用ICSharpCode.SharpZipLib进行文件压缩,目前还没实现加密压缩/解压缩。
- 使用tar和gzip对某文件夹内的某类型文件进行压缩与解压缩
- Python数据分析与机器学习-使用Kmeans进行图像压缩
- 在Python中使用zlib模块进行数据压缩的教程
- 在使用ICSharpCode.SharpZipLib进行目录压缩后,再解压缩是提示这个错误Size mismatch: 4294967295;126976 70202;126976
- VC使用Zlib对内存流进行压缩与解压缩
- 使用Gzip对流进行压缩、解压缩
- 使用Zlib库进行文件的压缩和解压
- 用gzip方式进行压缩数据,解压缩数据
- VC使用Zlib对内存流进行压缩与解压缩
- 使用PHP进行压缩/解压缩文件操作技巧汇总
- 使用Zlib库进行文件的压缩和解压