当前位置:首页 > 用C++实现数据无损压缩、解压(使用LZW算法)
oldcode = code; } else {
StrFromCode(&s, oldcode); StrJoinChar(&s, s.string[0]); WriteString(dest, s); AddTableEntry(s); switch(ItemPt) {
case 511: Bits = 10; break; case 1023: Bits = 11; break; case 2047: Bits = 12; break; }
oldcode = code; } } }
free(t.string); free(s.string);
*len = BytePt + (BitPt != 0); return OutBytes; }
LZWCoder::LZWCoder() {
unsigned int i;
for(i = 0; i < 4097; i ++) {
StrTable[i].string = NULL; StrTable[i].len = 0; } }
LZWCoder::~LZWCoder() {
unsigned int i;
for(i = 0; i < 4097; i ++) free(StrTable[i].string); } 用法:
LZWCoder *Coder; Coder = new LZWCoder();
然后用
Coder->Encode(char *src, unsigned int len, char *dest); Coder->Decode(char *src, unsigned int *len, char *dest);
进行压缩或解压。Encode函数中,src是输入数据的指针,len是输入数据的长度,dest是输出数据的指针。函数返回输出数据的长度。Decode函数中各参数与Encode类似,但*len会返回解压过程使用了输入数据的字节数(一般等于压缩时输出数据的长度)。使用时把要压缩的数据分成每段8K来处理,效果会比较好。
算法实现没做优化,速度比较慢。
共分享92篇相关文档