思路:
編碼
所需標頭檔案:
#ifndef head1_h_included
#define head1_h_included
#include#include#include#include#include#include#includeusing namespace std;
struct htnode
};bool operator
charsize=mmp.size();
datearr=new _date[charsize];
int top=0;
for(it=mmp.begin(); it!=mmp.end(); ++it)
mmp.clear();
}void bulidtree()
/*二叉樹構建完成
陣列為hufarr 根節點為2*charsize-2
對應的字元在datearr.cc裡面*/}
void getcharcode(){/*
需要:哈夫曼節點陣列hufarr,字元表種類數charsize
輸出:字元對應的編碼 存到charcodearr
*/charcodearr=new char*[charsize];
char *midc=new char[charsize+1];//作為中間字串
int top,now_node,next_node;
allcodesize=0;
for(int i=0; i此**儲存到文字時按照如下方式儲存
解碼就比較簡單了:
解壓程式
*/#include"head1.h"
void compress_file(file *fp)//對檔案進行解壓 當成解壓字元assic碼並存到文字裡面(二進位制儲存)
{ int charsize,allcodesize,info_size;
int sizepos,bitpos,now_index;
char *codetable;
char *codebitarr;
char *infoarr;
htnode* hufcodearr;
int mid;
fread(&charsize,4,1,fp);//讀取 charsize
fread(&allcodesize,4,1,fp);//讀取 有用的編碼位數
fread(&info_size,4,1,fp);//讀取 原來的位元組數目
codetable=new char[charsize];//申請 字母表記憶體
hufcodearr=new htnode[2*charsize-1];//申請 hufmantree記憶體
fread(codetable,1,charsize,fp);//讀取 字母表
fread(hufcodearr,sizeof(htnode),charsize*2-1,fp);//讀取哈夫曼樹
mid=allcodesize/8;
if(mid%allcodesize)
mid++;
codebitarr=new char[mid];//申請編碼記憶體
fread(codebitarr,1,mid,fp);//讀取編碼
int top=0;
int cnt=0;
now_index=2*charsize-2;
infoarr=new char[info_size];
while(top缺陷:
1.只有一種字元無編碼
2.把乙個位元組當作乙個一種字元 壓縮力度小
後續跟更新4個位元組為以乙個字元的編碼**
Huffman編碼原理及實現
lipracer關注 2018.10.18 23 03 00字數 251閱讀 1,116 huffman編碼特點 熵編碼,編碼效率受限資訊理論熵極限 關於這部分具體理論記不得,參考物理的熵,熵極大,就是最混亂的狀態,最混亂莫過於在一定碼長的情況下盡可能表現多的資訊,這個碼長就是最短碼長,也就是熵編碼...
Base64編碼運用與基本原理
編碼說白了就是按照一定規則對資料進行轉換,工作原理有點類似於查字典,base64編碼 叫base64的原因是因為其使用64個字元來對任意資料進行編碼 可以用來將或者其他檔案的二進位制資料轉換成字串形式,以下 是將乙個通過base64編碼成字串,將字串寫入txt檔案後再讀取出來生成乙個新的 結果如下 ...
RBAC實現原理之1
rbac就是 role based access controller,基於角色 role 的許可權 access 管理,這裡簡單介紹一下他的原理與實現方式之一。首先最基本的組成有 使用者 admin 角色 role 具體許可權 auth 這三者之間的關係是這樣的 乙個使用者只擁有一種角色,一種角色...