第一范文网 - 专业文章范例文档资料分享平台

用C++实现数据无损压缩、解压(使用LZW算法) - 图文

来源:用户分享 时间:2025/5/24 17:53:54 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

WriteCode(dest, 0); free(Omega.string); free(t.string); return BytePt; }

unsigned int LZWCoder::Decode(char *src, unsigned int *len, char *dest) {

unsigned int code, oldcode; TStr t, s; BytePt = 0; BitPt = 0; OutBytes = 0; t.string = NULL; t.len = 0; s.string = NULL; s.len = 0; InitStrTable();

while((code = GetNextCode(src)) != 257) {

if(code == 256) {

InitStrTable();

code = GetNextCode(src); if(code == 257) break; StrFromCode(&s, code); WriteString(dest, s); oldcode = code; } else {

if(code <= ItemPt) {

StrFromCode(&s, code); WriteString(dest, s); StrFromCode(&t, oldcode);

StrJoinChar(&t, s.string[0]); AddTableEntry(t); switch(ItemPt) {

case 511: Bits = 10; break; case 1023: Bits = 11; break; case 2047: Bits = 12; break; }

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来处理,效果会比较好。 算法实现没做优化,速度比较慢。

用C++实现数据无损压缩、解压(使用LZW算法) - 图文.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c1cnic12imx4yj364r8vi_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top