开源压缩算法库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;
}
首先介绍一下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;
}
相关文章推荐
- zlibwindows下使用方法步骤
- 在OpenResty中使用lua-zlib的方法
- 在OpenResty中使用lua-zlib的方法
- zlib api使用方法摘要[ZT]
- zlib使用方法
- zlib中compress函数的使用方法
- PHP使用zlib扩展实现GZIP压缩输出的方法详解
- zlib库compress和uncompress函数的使用方法
- 使用GZIPOutputStream解压byte[]出现Unexpected end of ZLIB input stream的解决方法
- C++ 压缩文件及文件夹方法 使用zlib开源库
- windows 下使用zlib 方法
- C++内嵌代码使用压缩的方法(compress和uncompress函数)需要有zlib,编译时加-lz
- C++内嵌代码使用压缩的方法(compress和uncompress函数)需要有zlib,编译时加-lz
- NodeJS学习系列课程笔记(NodeJs zlib库文件解压缩的相关使用方法)
- 在OpenResty中使用lua-zlib的方法
- bootstrap---treeview使用方法
- STM32中malloc的使用失败处理方法
- Android去Title和主题Theme使用方法
- webwork中类似struts的DispatchAction的使用方法。
- Win10进不了u盘启动该怎么办?win10无法使用U盘启动的解决方法!