⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chuffman.h

📁 huffman编码实现文本文档的压缩和解压缩
💻 H
字号:
#pragma once
#include <malloc.h>
#include <string>
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
class CHuffman
{
	typedef struct{
		unsigned int weight;
		unsigned int parent,lchild,rchild;
	}HTNode,*HuffmanTree;
	typedef unsigned char** HuffmanCode;

	struct BYTE_8{
		unsigned char data;
		unsigned  operator [](int i)const{
			unsigned char tmp=data;//*(unsigned char*)this;
			if(tmp&(1<<(i-1)))
				return 1;
			return 0;
		}
	};
protected:
	//在HuffmanTree HT中选择两个权值最小的树的编号
	void Select(HuffmanTree HT,int num,int &s1,int &s2);
	//根据权值构造Huffman树HT,并进行编码
	void HuffmanCoding(HuffmanTree &HT,HuffmanCode&HC,unsigned int*weight,int n);
	//在一个字节中设置某个位的值,j介于1与8之间,c为0或1
	void setBit(BYTE_8&b,int j,unsigned char c);
	//清零
	void setByte0(BYTE_8&b);
	//利用折半查找法,在charSet中查找ch的位置
	void FindIndex(const char &ch,int &i,const unsigned char*charSet,int setNum);
	//根据Huffman编码集HC与符号集charSet,将origbuff压缩到destbuff中
	void Coding(const unsigned char*origbuff,unsigned char*&destbuff,int origNum,int destNum,
				const HuffmanCode &HC, const unsigned char*charSet,int setNum);
	//根据b的第j位的值(0或1),计算Huffman树HT的第p个元素的孩子的位置
	int Child(const HuffmanTree &HT,int p,int&j,const BYTE_8 &b);
	//根据Huffman编码集HC与符号集charSet,将origbuff解压到destbuff中
	void UnCoding(const unsigned char*origbuff,const HuffmanTree &HT,unsigned char*&destbuff,int root,int len, const unsigned char*charSet);
public:
	//将文件sourcefile中的数据流压缩到文件destfile中
	void compress(const char*sourcefile,const char*destfile);
	//将文件sourcefile中的数据流解压到文件destfile中
	void uncompress(const char*sourcefile,const char*destfile);
	CHuffman(void);
	~CHuffman(void);
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -