本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源代码
请关注 李木空间 http://www.limou.net 更多C/C++, 源代码分享
喜欢本文章的话,您可以分享一下哦
您可能感兴趣的同类文章
- C++:读取lsass.exe内存数据,获得Windows开机帐号密码
- C++:猫吃老鼠算法
- C++:UDP协议实现局域网广播通信
- C++:俄罗斯方块源代码,经典值得一看
- C++:using namespace详解,“命名空间”的这些事
- VC++:unresolved external symbol _main原因及解决办法
- C:合数分解质因数源代码
- unsigned int i;for(i=9;i>=0;i- -){printf(“%u\n”,i)}为什么会无限循环?
- 最新WDK7600在VC6.0下的编译开发配置环境
- C:链表的操作(二),如何打印一个链表
-
C++:LZARI算法类,实现LZARI压缩解压缩:目前有1 条留言
给我留言

1535







这个类很实用啊。