今天的課程設計終於查完了,做了將近一周的huffman也暫時告一段落了。其間用到了壓縮,又開拓了眼界,又認識了乙個標頭檔案,那我們接下來就小結一下用到的壓縮方法。
壓縮:
while(str.size() >= 8)
//我們壓縮的時候肯定不會這麼巧剛好是8位的,我們就需要處理一下,判斷最後剩下的str.size()的大小,int nn = 8 - str.size(),這樣不夠8位的我們在編碼最後直接 補'0',湊夠8位,然後再把nn也存到檔案尾,在解壓的時候把nn讀出來,再把最後全部解壓之後的編碼去掉自己新增的nn個'0',這樣的編碼就是真正的編碼了。
上面的程式就相當於把8位壓縮成乙個char,這樣就實現了壓縮的目的。
解壓:
ifstream ffile("final.txt", ios_base::binary); //二進位制開啟壓縮檔案
string foo, fstr = "";
int a[8];
ffile.seekg(-1l, ios::end); //goto the file end //先定位到檔案的最後乙個字元,讀出nn
char cc;
ffile.get(cc);
int xx = cc - '0'; //get the number of extra charactor //轉成數字
ffile.seekg(0l, ios::beg); //goto file begin //再定位到檔案首開始讀壓縮字元
while(getline(ffile, foo))
}fstr.erase(fstr.size() - 8 - xx, 8 + xx); //把自己新增的xx個『0』去掉
ffile.close(); //關閉檔案
這樣我們就得到了壓縮前的01編碼串fstr~~~
以上就是在寫課程設計時學習到的壓縮已解壓的方法,比較膚淺,以後了解的多了,再來更新^_^
Huffman 編碼壓縮解壓
說明 某技校資料結構課作業 目前的演算法只對有規律的檔案有效。此處的規律指的是0x00到0xff的分布不均勻 txt檔案不論漢字還是英文有效。jpg,pdf壓縮無效。以下內容毫無邏輯,不具有參考價值。參考資料 思路建立 1.讀寫二進位制檔案file fi fopen origin.data rb f...
Huffman霍夫曼壓縮編碼演算法實現分析
哈夫曼編碼huffman方法於1952年問世,迄今為止仍經久不衰,廣泛應用於各種資料壓縮技術中,且仍不失為熵編碼中的最佳編碼方法,deflate等壓縮演算法也是結合了huffman演算法的。採用霍夫曼編碼時有兩個問題值得注意 霍夫曼碼沒有錯誤保護功能,在解碼時,如果碼串中沒有錯誤,那麼就能乙個接乙個...
huffman編碼實現資料壓縮
huffman編碼壓縮 huffman編碼壓縮的 如下 主方法 public static void main string args 2.統計內容的字元數量,構建list為哈夫曼樹做準備 將統計字元個數的方法封裝 public static list countcharnum byte bytes...