decodetree.cpp

来自「使用半适应的huffman算法实现了文件的压缩和解压」· C++ 代码 · 共 72 行

CPP
72
字号
#include <iostream>
#include <fstream>
#include "bitio.h"
#include "decodetree.h"

using namespace std;

decodetree::decodetree(const char* filepath){
	ifstream in(filepath);

	in >> itemCount;
	in >> rootid;
	in >> wordcount;
	for(int i = 0;i < 512;i ++){
		in >> it[i].id;
		in >> it[i].left_child;
		in >> it[i].right_child;
	}
	in.close();	
}

void decodetree::decodePro(void){
	int rt;
	char t;
	int lastnode;
	int putcount = 0;
	unsigned char buffer[100];
	static int state = 0;

	bitFile in("out.txt"),
			out("m.txt");

	while(1){
		t = (char)in.getChar();
		if(t == 'a') //temp
			break;
	}
	in.getBit();
	while(1){
		rt = in.getBit();
//		cout << rt;
		if(rt == -1)	//over
			break;
		if(state == 0){
			lastnode = nextNode(rootid,rt);
			state = 1;
		}
		else if(state == 1){
			lastnode = nextNode(lastnode,rt);
		}
		if(lastnode >= 0 && lastnode <= 255){
			out.writeChar(lastnode);
			putcount ++;
//		cout << lastnode << endl;
			state = 0;
		}
		if(putcount == wordcount)
			break;
	}
}

int decodetree::nextNode(int id,int dir){
	for(int i = 0;i < 512;i ++){
		if(it[i].id == id){
			if(dir == 0)
				return it[i].left_child;
			else
				return it[i].right_child;
		}
	}
	return -1;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?