作者uranusjr (←這人是超級笨蛋)
看板C_and_CPP
標題Re: [問題] 霍夫曼編碼
時間Mon Jun 4 13:54:47 2012
※ 引述《gn123 (GnCtIlike)》之銘言:
: 小弟最近在寫霍夫曼壓縮
: 照他的說明:
: "假設想要壓縮下面這段資料:ACDABA
: 因為它有 6 個英文字元,所以這串文字占用 6 個位元組 (Bytes) 或 48 各位元 (Bits)
: 壓縮後的資料變成:01101110100 (經過霍夫曼樹後)
: 這表示只用了 11 個位元就可以取代了 48 個位元 => 達成壓縮目的"
: 我是讀進txt檔案 經過運算後輸出txt檔案
: 可是看了看文件內容... 原本:6個位元組(ACDABA型態)
: 輸出後:11個位元組(01101110100) 崩潰...
這邊是 11 bytes 代表你這裡的每個 0/1 都佔一個 byte, 而不是一個 bit
加上你看得到檔案裡面寫的 0/1
代表你輸出的東西並不是數字本身, 而是這個數字的字元
這裡要先搞清楚: 你看到的數字, 和電腦裡面儲存的東西是不一樣的
能夠在文字檔裡儲存的字元, 都經過編碼處理
而 C 語言(C++ 也一樣, string 類別是抽象化, 狀況不同)吃的是編碼的數字
所以如果你想直接在一個檔案中寫入二進位資料, 就不能把這個二進位資料轉成字串
你的狀況就是把資料轉成字串了
所以當你想輸出 0, 真正被寫到檔案中的是 0 這個字元的編碼
也就是 C 語言的 '0', 用 ASCII 編碼的話就是 0x30 這個數字
而不是真的在檔案中寫入一個「低位元」
--
╱ ̄ ̄ ̄╲
▏
◢█◣ ▏
︻█︻█ ▏
成龍表示: 是喔...
′/ ‵ ▏
╰╯ █╱
ψQSWEET ◥︶█◤
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.243.41.98
推 gn123:謝謝>< 原本以為這些不重要,程式越大才知道這些資料重要性Q 06/04 14:22
→ diabloevagto:跟程式大小無關,這是計概基本常識... 06/04 15:14
推 gn123:沒學好lol 當初以為這不重要Q_Q 06/04 15:30