作者:
welkins (和平真好)
2018-04-13 22:36:06想請問一下
如果我想要實作一個用Huffman來壓縮非文字檔的壓縮程式,
我的做法是先用一個陣列存每個ASCII各別的頻率再依照頻率去建Huffman Tree,
然而這種做法做出來的在解壓縮txt的時候還能正常執行,
但是我試著壓縮mp3之類時卻無法成功解壓縮。
原因是出在ASCII上面嗎?
有點不知道這種情況要怎麼解
希望各位可以指點一下,十分感謝
===========================
手邊沒code剛剛重寫了一部分
開檔部分是
ifstream fin;
fin.open("input.txt", ios::binary);
讀進來的部分大概是這樣
https://pastebin.com/tSAVHTTt
把ch讀進來後存成ASCII頻率的陣列
在用這個陣列去建Huffman
作者:
uranusjr (â†é€™äººæ˜¯è¶…級笨蛋)
2018-04-13 22:53:00非文字檔哪來的 ASCII?你到底做了什麼?
比對看看解壓縮後的內容是什麼地方出錯了?直覺跟換行字元有關(?
作者:
wtchen (沒有存在感的人)
2018-04-13 23:25:00你的程式碼呢?跟C的關聯性呢?不補資訊就砍文
作者: nightnawk (西西) 2018-04-14 00:37:00
你陣列存的是一個char所以寫出去應該也是0x00~0xff
作者: jerryh001 2018-04-14 00:45:00
sign/unsign的問題?
作者:
Lipraxde (Lipraxde)
2018-04-14 03:21:00當成文字處理是什麼意思啊?不是直接用0~255的值去算喔?
作者:
wtchen (沒有存在感的人)
2018-04-14 03:47:00我給你12小時把code補上,不然砍文
那應該就是程式寫錯而已,多找找 bug,加油 (拍肩)code 不完整。然後這邊就標準的 signed/unsigned 錯誤想想如果 ch 的內容是 -100 (你以為是156) 會發生什麼事
作者:
Lipraxde (Lipraxde)
2018-04-14 13:05:00字數數錯也不會變亂碼吧,應該還有其他地方錯