看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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