⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 实现lzari压缩算法的c++类.cpp

📁 这是一个基于LZARI算法的数据压缩的类.Haruhiko Okumura 于1989年7月4日用c语言写实现了这个算法.但是上面用到了一些全局或静态的变量,在MFC下用起来很不方便.我把它改写成了一
💻 CPP
字号:
1.压缩/解压缩文件 

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 

就这么简单. 
2.压缩/解压缩一段内存缓冲区 

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 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(); 
3.释放内存,并清空标志. 
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(); 
请注意千万不要这样调用: 
Lzari.Compress(pInBuffer,nInsize,pOutBuffer,nOutSize);//压缩pInBuffer 
// 
// 用pOutBuffer 做一些事情 
// 
Lzari.Release(); 
Lzari.UnCompress(pOutBuffer,nOutSize,pOutBuffer2,nOutSize2); //解压缩第一次压缩的结果 
因为Release()后pOutBuffer的指针就无效了.而如果不调用Release()又会导致pOutBuffer和pOutBuffer2指向同一段内存从而导致混乱.碰到这种情况最好使用两个类实例来完成.如下: 
LZARI Lzari; 
LZARI UnLzari; 
Lzari.Compress(pInBuffer,nInsize,pOutBuffer,nOutSize);//压缩pInBuffer 
// 
// ... 
// 

UnLzari.UnCompress(pOutBuffer,nOutSize,pOutBuffer2,nOutSize2); //解压缩第一次压缩的结果 
// 
// ... 
// 
Lzari.Release(); 
UnLzari.Release(); 

由于程序中用到了STL的vector模板,请在stdafx.h中加入以下一行: 
#include .当然,这个类并不依赖于MFC,可以使用在任何C++程序中. 
另外,LZARI压缩的效果比zip差一些,差距大约是5%~10%,压缩速度则基本相当. 
注:与算法有关的问题请不要问我,我也不知道 :) 其他问题欢迎指教 querw@sina.com 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -