📄 chuffman.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 + -