久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

LZW壓縮類定義和構(gòu)思

作者:huqin   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年12月17日   【字體:

//定義CLZW類
#ifndef _LZW_H_INCLUDED
#define _LZW_H_INCLUDED
#include stdio.h//用于getc,getwc
#include string.h//用于memset
#include stdlib.h //用于malloc,free

#define MAX_LZW_BITS 12 //最大LZW代碼大小
#define LZW_TABLE_SIZE (1<#define HSIZE 5003 //hash表80%占有率大小

typedef int INT32;
typedef short UINT8;
typedef short code_int; //取值范圍為-1到2*MAX_LZE_BITS
typedef short hash_int; //取值范圍為-2到2*HSIZE

#define MAXCODE(n_bits) (((code_int)1<<(n_bits))-1)

class CLZW
{
public:
CLZW();//構(gòu)造函數(shù)
~CLZW();//析構(gòu)函數(shù)

FILE* outfile;
FILE* infile;

int GetDataBlock(char *buf);//一個(gè)零長(zhǎng)度的塊標(biāo)志數(shù)據(jù)塊序列的結(jié)束
void SkipDataBlocks();//找到數(shù)據(jù)塊結(jié)尾
void ReInitLZW();//初始化LZW狀態(tài)
void InitLZWCode (FILE* file,int in_size);//初始化文件對(duì)象
int GetCode();//從壓縮數(shù)據(jù)提取以后的code_size個(gè)比特
int LzwReadByte();//讀取一個(gè)LZW壓縮的字節(jié)

void CHAR_OUT(int c);//向現(xiàn)有緩沖區(qū)增加一個(gè)字節(jié)
void flush_packet();//清空緩沖區(qū)中的積累數(shù)據(jù)
void clear_hash();//清空hash表
void clear_block();//重置壓縮并發(fā)送一個(gè)清除碼
void output(code_int code);//發(fā)送一個(gè)n_bits比特的代碼并用cur_accum和cur_bits重組一個(gè)8位的字節(jié)
void compress_init(FILE* file,int ibits);//初始化LZW壓縮
void compress_byte(int c);//壓縮一個(gè)8位字節(jié)
void compress_term();//保存結(jié)尾

protected:
INT32 cur_accum;//用于保存還未輸出的bits
int cur_bits;//cur_accum中的bits
int n_bits;//當(dāng)前bits/code數(shù)目
code_int maxcode;//n_bits數(shù)目中的最大的代碼
int code_counter;//輸出符號(hào)計(jì)數(shù)器
int init_bits;//初始n_bit..清除后重新恢復(fù)
code_int ClearCode;//清除代碼(保持不變)
code_int EOFCode;//EOF代碼(結(jié)束代碼)
bool first_byte;//判斷是否為第一個(gè)字節(jié)

//壓縮
code_int free_code;//備用代碼
code_int *hash_code;//符號(hào)代碼Hash表
code_int *hash_prefix;//前綴符號(hào)Hash表
UINT8 *hash_suffix;//后綴字節(jié)Hash表
code_int waiting_code;//還沒(méi)有輸出的代碼
int bytesinpkt;//在當(dāng)前緩沖區(qū)中的bytes數(shù)目
char packetbuf[256];//用于壓縮的積累緩沖區(qū)

//解壓
char code_buf[256+4];//當(dāng)前輸入數(shù)據(jù)塊
int last_byte;//code_buf中的bytes
int last_bit;//code_buf中的bits
bool out_of_blocks;//遇到結(jié)尾為真值
code_int *symbol_head;//前綴符號(hào)表
UINT8 *symbol_tail;//后綴字節(jié)表
UINT8 *symbol_stack;//用于符號(hào)展開的棧
UINT8 *sp;//棧指針

};

 

#endif

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: av一区二区三区四区 | 国产中的精品av涩差av | 人人澡人人射 | 久久99深爱久久99精品 | 一区二区中文字幕 | 黄色免费看| 99精品久久久久久 | 国产中文字幕网 | 在线中文字幕亚洲 | 国产精品一区久久久 | 久久精品亚洲一区 | 亚洲三区在线播放 | 蜜桃视频在线观看www社区 | 色天天综合 | 亚洲一二三区av | 91精品国产自产在线老师啪 | 日韩视频精品 | 亚洲欧美一区二区三区国产精品 | 国产亚洲精品精品国产亚洲综合 | 欧美精品91 | 国产一区二区在线91 | 中国大陆高清aⅴ毛片 | 日韩欧美精品在线 | 欧美一区二区三区四区视频 | 国产一区二区三区四区在线观看 | 欧美成人影院 | 九九热在线免费观看 | 亚洲一二三区精品 | 精品少妇一区二区三区日产乱码 | 欧美一区二区三区在线观看 | 精品国产乱码久久久久久丨区2区 | 日韩精品一区二区三区 | 国产在线小视频 | 国产成人免费视频网站视频社区 | 日韩在线中文 | 一区二区三区精品 | 久久精品手机视频 | 亚洲精品女人久久久 | 精品一区二区三区不卡 | 亚洲综合色自拍一区 | 91精品国产91久久久 |