LZW编解码算法实现与分析

本文详细介绍了LZW编码和解码算法的思想,编码器利用词典完成字符流到码字流的转换,而解码器则在重建词条的过程中解码,两者存在一个字符的时间差。通过代码实现,展示了LZW算法如何影响文件大小。
摘要由CSDN通过智能技术生成

实验名称: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&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值