?? 實現lzari壓縮算法的c++類.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 + -