您的位置:首页 > 其它

开源压缩算法库zlib使用方法

2012-11-14 10:58 351 查看
前一段时间项目开发中需要用到数据压缩,所以对几种开源的无损压缩算法进行了一些研究,这里把基本的使用方法记录下来,供大家参考

首先介绍一下zlib

zlib目前最新的版本是1.2.7,更新时间是2012年5月2日

我们从zlib的官方网站上下载其源代码,采用源码编译的方式进行下一步的开发。

首先是下载和解压缩,这里没什么好说的,注意一点,最好将源码下载到磁盘的根目录下,不要放在中文的目录名下面,以免造成编译失败。

解压zlib之后,先打开visual studio的命令行编译环境,在开始菜单: microsoft visual studio  ->visual studio tools ->visual studio command prompt

定位到zlib的解压缩目录,如C:\zlib127\zlib-1.2.7   执行以下命令nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" OBJA="inffas32.obj match686.obj"

这个命令实际上是按照win32目录下的Makefile.msc文件中定义的编译规则进行编译,这里的nmake类似于Linux下的make。

如果计算机上正确安装了visual studio的开发环境(2008、2010、2012版均可),一般都能正确编译。如果命令成功执行,将会在zlib目录下编译生成我们所需要的zlib.lib zdll.lib zlib1.dll 和其它的一些文件。

在需要用到压缩算法的项目里添加zlib目录下的所有.h头文件,和zlib.lib zdll.lib zlib1.dll这几个文件后就可以使用zlib提供的压缩函数了。

调用zlib的压缩函数其实很简单,只需要引入zlib.h 并指定编译器编译时包含zlib.lib库文件,最后,保证zlib1.dll文件与编译后的可执行程序在同一目录或在系统环境变量path可以找到的目录下面,如windows\system32。

这里我们写一个简单的例子程序

#include "stdafx.h"

#include <memory>

#include "../../include/zlib.h"

#pragma comment(lib ,"../../zlib.lib")

void PrintBuf(unsigned char buffer[],int bufsize)

{

    for(int i=0;i<bufsize;i++)

        printf(("%02X"),buffer[i]);

}

int _tmain(int argc, _TCHAR* argv[])

{

    unsigned char buffer[512];

    unsigned char buffer2[1024];

    unsigned char buffer3[512];

    memset(buffer,1,sizeof(buffer));

    memset(buffer3,0,sizeof(buffer3));

    int err;

    unsigned long size=sizeof(buffer);

    unsigned long zipedsize=sizeof(buffer2);

    PrintBuf(buffer,sizeof(buffer));

//压缩 ,第一个参数是目标缓冲区,存放压缩后的数据,第二个参数是压缩后的数据大小,第三个参数是源数据缓冲区,第四个参数是源缓冲区的大小

    err=compress(buffer2,&zipedsize,buffer,size);

    if(err!=Z_OK)

        return -1;

    PrintBuf(buffer2,sizeof(buffer2));

//解压缩,第一个参数是目标缓冲区,存放解压缩后的数据,第二个参数是解压缩后的数据大小,第三个参数是源数据缓冲区,第四个参数是源缓冲区的大小

    err=uncompress(buffer3,&size,buffer2,zipedsize);

    if(err!=Z_OK)

        return -1;

    PrintBuf(buffer3,sizeof(buffer3));

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: