-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDecode.cpp
More file actions
34 lines (31 loc) · 1.22 KB
/
Decode.cpp
File metadata and controls
34 lines (31 loc) · 1.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include"HuffmanCoding.h"
//解码过程
bool Document::Decode() {
long long data = 0;
int flag = TOP_NUM;
unsigned char buffer[9]="00000000";
while (!feof(reader)) {
if (fread( & buffer, 8, 1, reader) <= 0 && !feof(reader)) //如果读取失败,则返回错误
return false;
if(feof(reader)){
cout << "Finish. Check '" << FILEname << "'." << endl;
return true;
}
fseek(reader,1,SEEK_CUR);
///8bit合并输出
for (int i = 0; i < 8; i++) {
flag = HuffmanTree[flag][buffer[i] == '0' ? _left : _right]; //按bit读取到0,向左子树找;否则向右子树找
if (HuffmanTree[flag][_left] == -1 && HuffmanTree[flag][_right] == -1) { //判断是否是叶子节点,若是则写入叶子节点编号
if (fwrite( & flag, 1, 1, writer) <= 0)
return false;
data++; //字节计数器+1
flag = top; //更新flag
}
if (data >= FILEsize) { //判断是否到达文件尾
cout << "Finish. Check '" << FILEname << "'." << endl;
return true;
}
}
}
return false;
}