资源简介
LZW压缩算法的C++源码,已经封装成class
代码片段和文件信息
// LZW.cpp: implementation of the CLZW class.
//
//////////////////////////////////////////////////////////////////////
#include “stdafx.h“
#include “LZW.h“
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
void CLZW::InitGlobalVar()
{
num_bits = INIT_BITS;
bytes_in = 0;
bytes_out = 0;
checkpoint = CHECK_TIME;
max_code = MAXVAL(num_bits);
}
CLZW::CLZW()
{
InitGlobalVar();
code_value = NULL;
prefix_code = NULL;
append_character = NULL;
code_value=(int *)malloc(TABLE_SIZE*sizeof(unsigned int));
prefix_code=(unsigned int *)malloc(TABLE_SIZE*sizeof(unsigned int));
append_character=(unsigned char *)malloc(TABLE_SIZE*sizeof(unsigned char));
}
CLZW::~CLZW()
{
if(code_value)
free(code_value);
if(prefix_code)
free(prefix_code);
if(append_character)
free(append_character);
}
/* UNCHANGED from original
* This is the hashing routine.
*/
unsigned int CLZW::find_match(unsigned int hash_prefix unsigned int hash_character)
{
int index offset;
index = (hash_character << HASHING_SHIFT ) ^ hash_prefix;
if (index == 0 )
offset=1;
else
offset = TABLE_SIZE - index;
while(1)
{
if(code_value[index] == -1)
return(index);
if( prefix_code[index] == hash_prefix &&
append_character[index] == hash_character)
return(index);
index -= offset;
if (index < 0)
index += TABLE_SIZE;
}
}
/* UNCHANGED from original
* Decode a string from the string table storing it in a buffer.
* The buffer can then be output in reverse order by the expansion
* program.
*/
unsigned char *CLZW::decode_string(unsigned char *buffer unsigned int code)
{
int i=0;
while(code > 255 )
{
*buffer++ = append_character[code];
code=prefix_code[code];
if (i++ >= 4000 )
{
// printf(“Error during code expansion\n“);
exit(1);
}
}
*buffer=code;
return(buffer);
}
/* UNCHANGED from original
* Input a variable length code.
*/
unsigned int CLZW::input_code(FILE *input)
{
unsigned int return_value;
while (input_bit_count <= 24 ) {
input_bit_buffer |= (unsigned long) getc(input) << (24 - input_bit_count);
input_bit_count += 8;
}
return_value=input_bit_buffer >> (32-num_bits);
input_bit_buffer <<= num_bits;
input_bit_count -= num_bits;
return(return_value);
}
/* MODIFIED Output a variable length code.
*/
void CLZW::output_code(FILE *output unsigned int code)
{
output_bit_buffer |= (unsigned long) code << (32 - num_bits -
output_bit_count);
output_bit_count += num_bits;
while (output_bit_count >= 8) {
putc(output_bit_buffer >> 24 output);
output_bit_buffer <<= 8;
output_bit_count -= 8;
bytes_out++
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 9266 2008-11-08 20:02 LZW\LZW.cpp
文件 2431 2008-11-08 11:50 LZW\LZW.h
目录 0 2009-01-03 14:01 LZW
----------- --------- ---------- ----- ----
11697 3
- 上一篇:MFC下获取字符的点阵字模数据并显示
- 下一篇:C++简单的飞行射击游戏源码
相关资源
- MFC下获取字符的点阵字模数据并显示
- OpenGL+MFC+点云
- MFC下配置opengl环境具体步骤
- 利用opencv做的垃圾检测代码
- lzw压缩编解码
- 实现对任意格式文件压缩 C++
- C++实现对文本(单纯文字,不是文本
- 电梯仿真代码MFC(绝对可以
- 多窗口之间的通信
- 课程设计--计算器基于MFC
- rsa MFC实现源码
- 哈夫曼压缩解压算法-C语言
- MFC绘制阿基米德螺旋线.rar
- MFC在ListCtrl中加入Button
- MFC基于对话框的二进制与十六进制间
- 基于MFC的多媒体音频播放器
- Mfc获取本机IP地址
- VC6.0_MFC_读写配置文件
- mfc聊天程序,利用TCP/IP完成双向数据
- MFC中给对话框添加皮肤Skin_H
- 使用MFC进行GUI编程
- MFC多标签仿Chorme浏览器Demo
- PEMFC matlab 仿真
- MFC中将CScrollView视图显示在对话框中
- MFC中配置文件ini的使用
- 说话人识别和确认系统
- VS2010 MFC 读写Excel 可运行
- MFC实现填充算法
- 小蔡时钟V2.0(MFC版) VS2008
- MFC图像处理 反色和红色
评论
共有 条评论