[问题] Huffman压缩/解压

楼主: achicn3 (Sher)   2018-12-27 17:30:39
开发平台(Platform): (Ex: Win10, Linux, ...)
Windows 10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
Dev C 之后会移植到Qt上
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
目前针对txt档案是可以压缩 与 解压缩的
只是再对影片档 图片档 等其他档案无法压缩
喂入的资料(Input):
a.jpg
预期的正确结果(Expected Output):
压缩后的档案
STDOUT 会印出编码表
错误结果(Wrong Output):
STDOUT 印出空白 或是一两行乱码就没了
也无法进行解压缩
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
https://ideone.com/ZD7z1f
读档部分是
map<char, int> freqs; // frequency for each char from input text
int i;
// Opening input file
//
ifstream inputFile;
inputFile.open(inputFilepath,std::ifstream::binary | std::ifstream::in
);
if (!inputFile)
{
cerr<<"error: unable to open input file: " << inputFilepath <<endl
;
}
char ch[1]; //char
unsigned total = 0;
while (true)
{
inputFile.read((char*)ch,sizeof(ch));
if(inputFile.eof())
break;
//计算频率
freqs[ch[0]]++;
total++;
}
感觉是这部分问题
补充说明(Supplement):
有将档案读写部分改成用 c的 fopen(...,rb)
然后fread fwrite等等 可是依然只对txt档案有用
卡了很久感觉是开档读档的问题 可是又不知道哪里有问题 故来求解 谢谢各位
作者: Schottky (顺风相送)   2018-12-27 17:40:00
char 如果是负值怎么办
作者: jerryh001   2018-12-27 19:19:00
用unsigned freqs的型态也要改 直接取负号当然无法还原
作者: longlongint (华哥尔)   2018-12-27 21:24:00
先找二进制编辑器生小档案测试观察看看?
作者: poyenc (发箍)   2018-12-28 19:15:00
统一用 read/write
作者: longlongint (华哥尔)   2018-12-28 20:31:00
空白的问题听起来跟跳脱字符的故事很像
作者: rbufghj9713 (我只是来潜水)   2018-12-28 21:44:00
你会不会table有存错之类的?

Links booklink

Contact Us: admin [ a t ] ucptt.com