您的位置:首页 > 其它

使用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐