实验名称:LZW编解码算法实现与分析
【LZW编码算法的思想 】
LZW编码是围绕称为词典的转换表来完成的。LZW编码器通过管理这个词典完成输入与输出之间的转换。LZW编码器的输入是字符流,字符流可以是用8位ASCII字符组成的字符串,而输出是用n位(例如12位)表示的码字流。
【LZW解码算法的思想】
解码算法注意要点:
1.一边解码,一边重建词条。
2.比编码器晚一个字符。
代码实现
#ifndef PCH_H
#define PCH_H
#include <stdio.h>
typedef struct {
FILE *fp;
unsigned char mask;
int rack;
}BITFILE;
BITFILE *OpenBitFileInput(char *filename);
BITFILE *OpenBitFileOutput(char *filename);
void CloseBitFileInput(BITFILE *bf);
void CloseBitFileOutput(BITFILE *bf);
int BitInput(BITFILE *bf);
unsigned long BitsInput(BITFILE *bf, int count);
void BitOutput(BITFILE *bf, int bit);
void BitsOutput(BITFILE *bf, unsigned long code, int count);
#endif
下面展示一些 `内联代码片`。
pch.cpp
#include "pch.h"
#include <stdlib.h>
#include <stdio.h>
using namespace std;
BITFILE *OpenBitFileInput(char *filename) {
BITFILE *bf;
bf = (BITFILE *)malloc(sizeof(BITFILE));
if (NULL == bf) return NULL;
if (NULL == filename) bf->fp = stdin;
else bf->fp = fopen(filename, "rb");
if (NULL == bf->fp) return NULL;
bf->mask = 0x80;
bf->rack = 0;
return bf;
}
BITFILE *OpenBitFileOutput(char *filename) {
BITFILE *bf;
bf = (BITFILE *)malloc(sizeof(BITFILE));
if (NULL == bf) return NULL;
if (NULL == filename) bf->fp = stdout;
else bf->fp = fopen(filename, "wb&