免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1355 | 回复: 0
打印 上一主题 下一主题

使用zlib库进行数据压缩 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-07 17:50 |只看该作者 |倒序浏览

使用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,写一段简单的代码测试看看或直接看zlib包下面的example.c文件。


#include stdio.h>
#include "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



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/54388/showart_1817623.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP