C++:LZARI算法类,实现LZARI压缩解压缩

 

C++:LZARI算法类,实现LZARI压缩解压缩

七月 28th, 2012   1 个评论

-

本C++类,是一个基于LZARI算法的压缩解压缩类,可以在任何C++包括MFC程序中使用。

LZARI压缩算法的压缩效果比之zip要稍差一些,差距大概为5%左右,压缩速度则相差不大,在此提供源代码,大家可以自由使用,改编成自己的压缩解压缩代码。

本人做了个测试,原大小为114,750 字节的exe程序,经zip压缩后,大小为8,806 字节,而经lzari压缩后,大小为12,636 字节。

原大小为1,665 字节的文本文档,经zip压缩后为1,157 字节,经lzari压缩后为1,068 字节,可谓各有千秋。

本类提供了5个接口:

压缩解压缩文件:

void Compress(const char *lpszInfile,const char *lpszOutfile);
void UnCompress(const char *lpszInfile,const char *lpszOutfile);

使用方法:

LZARI Lzari;
Lzari.Compress("show.bmp","show.liz");	//压缩文件 show.bmp 到 show.liz
Lzari.UnCompress("show.liz","show.bmp"); // 解压缩文件 show.liz 到 show.bmp

除此之外,还可对一段内存数据进行压缩解压缩:

void Compress(const BYTE *pInBuffer,int nInLength,const BYTE * &pOutBuffer ,int &nOutLength);
void UnCompress(const BYTE *pInBuffer,int nInLength,const BYTE * &pOutBuffer,int &nOutLength);

这两个接口的参数也不难理解,分别传入输入指针和长度,LZARI会返回一个只读的输出指针和长度.使用者不用担心内存分配的问题,当不需要使用输出结果时调用Release()就行了,以下是使用示例:

LZARI Lzari;
BYTE *pOutBuffer = NULL;
int nOutSize = 0;
char szInBuffer[] = "This is a class for compress and uncompress";
Lzari.Compress(szInBuffer,strlen(szInBuffer),pOutBuffer,nOutSize);//压缩pInBuffer
//
// 用pOutBuffer 做一些事情
//
Lzari.Release();//释放内存

释放内存,并清空标志函数:void Release();

若想让一个LZARI类实例既进行压缩操作又进行解压缩操作,请在后一个操作调用之前调用一下Release(); 如下所示:

LZARI Lzari;
Lzari.Compress(pInBuffer,nInsize,pOutBuffer,nOutSize);//压缩pInBuffer
//
// 用pOutBuffer 做一些事情
//
Lzari.Release();
Lzari.UnCompress(pInBuffer2,nInsize2,pOutBuffer2,nOutSize2); //解压缩pInBuffer2
//
// ...
//
Lzari.Release();

由于程序中用到了STL的vector模板,请在stdafx.h中加入以下一行

#pragma warning(disable:4786)
#include <VECTOR>

当然,这个类并不依赖于MFC,可以使用在任何C++程序中。

源代码下载:lzari源代码

关键词: C/C++, 源代码

-

喜欢本文章的话,您可以分享一下哦

分享到: 0

您可能感兴趣的同类文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值