?? 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 + -