⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 decodetree.cpp

📁 使用半适应的huffman算法实现了文件的压缩和解压
💻 CPP
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -