📄 huffmancodec.h
字号:
#ifndef _HUFFMANCODEC_H
#define _HUFFMANCODEC_H
//
//
// Huffman编解码器
//
//
#include <iostream.h>
typedef struct _HuffmanCodecPar //赫夫曼编码器参数
{
unsigned char cNum; //待编码字符
unsigned int nWeight; //待编码字符权值
// unsigned int nCode; //待编码字符的16位编码串
// unsigned char nCodeLen; //字符编码长度
}HUFFMANCODECPAR , *PHUFFMANCODECPAR;
typedef struct _HuffmanTreeNode //赫夫曼编码树结点
{
unsigned char cNum; //代编码字符
unsigned int weight; //权值
unsigned int nCode; //待编码字符的16位编码串
unsigned char nCodeLen; //字符编码长度
unsigned int parent; //双亲节点的序号,下标
unsigned int lchild; //左孩子的下标
unsigned int rchild; //右孩子的下标
}HTNODE, *PHUFFMANTREE;
typedef unsigned char * *HuffmanCode;
class CHuffmanCodec
{
private:
PHUFFMANTREE HT;
PHUFFMANCODECPAR pCodecPar; //待编码字符串数据区指针
unsigned int nCodecParLen; //待编码数据区长度
unsigned int m_nMin1 , m_nMin2; //保存最小的两个节点的序号
unsigned int nNodeNum;
protected:
void CountDataFrequence(unsigned char * pData, //原始数据区
long nLen); //原始数据区长度
//赫夫曼编码算法
void HuffmanCoding();
//赫夫曼解码算法
void HuffmanDeding();
void SelectTwoMin(unsigned int nNum);
//得到接点的左孩子节点位置
unsigned int GetLeftChild(PHUFFMANTREE TreeNode);
//得到节点的右孩子节点位置
unsigned int GetRightChild(PHUFFMANTREE TreeNode);
//编码程序
// 将赫夫曼字符串编码变成二进制码
//
void EncodeHuffmanStr(unsigned char *str , unsigned int &nCode , unsigned char & nCodeLen);
//解码程序
// 将二进制码还原成原始编码
//
void DecodeHuffmanCode(unsigned char * pCompressData, //压缩数据区
long nCompressLen, //压缩数据区长度
unsigned char * pData, //原始数据区
long & nLen //原始数据区长度
);
public:
CHuffmanCodec();
~CHuffmanCodec();
//
//赫夫曼编码器
//
void HuffmanEncode(unsigned char * pData, //原始数据区
long nLen, //原始数据区长度
unsigned char * pCompressData, //压缩数据区
long & nCompressLen, //压缩数据区长度
unsigned char & nBitLen //压缩数据余位数
);
//赫夫曼解码器
bool HuffmanDecode(unsigned char * pCompressData, //压缩数据区
long nCompressLen, //压缩数据区长度
unsigned char nBitLen, //压缩数据余位数
unsigned char * pData, //原始数据区
long & nLen //原始数据区长度
);
unsigned int GetHuffmanTreeNodeNum()
{
return nNodeNum;
}
//得到赫夫曼编码树
void GetHuffmanTree(PHUFFMANTREE pTreePtr);
//设置赫夫曼编码树
void SetHuffmanTree(PHUFFMANTREE pTreePtr , unsigned int nTreeNodeNum);
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -