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

📄 winzip.h

📁 自己写的huffman压缩 自己写的huffman压缩 自己写的huffman压缩
💻 H
字号:
#pragma once
#include "afx.h"
//#include"WinRARDlg.h"
#ifndef WINZIP
#define WINZIP
class CStake
{
	byte member;
	int MaxSize;
	
public:
	int size;
	CStake(){MaxSize=8;member=0;size=0;}
	int Lenth(){return size;}
	void Add(int mem){member=member<<1|mem;size++;}
	void Delete(int mem){member>>=1;size--;}
	bool Empty(){return (size==0?1:0);}
	bool Full(){return (size==MaxSize)?1:0;}
	byte Copy();
	//~CStake(){size=0;member=0;MaxSize=8;}
};
class Huffman
{
public:
	Huffman(){count=INT_MAX;code=0;left=NULL;right=NULL;}
	Huffman(int t,int ch)
	{
		count=t;
		left=NULL;
		right=NULL;
		code=ch;
	}
	Huffman(int t,int ch,Huffman* l,Huffman* r)
	{
		count=t;
		left=l;
		right=r;
		code=ch;
	}
	~Huffman(){left=NULL;right=NULL;count=0;code=0;}
	Huffman* left;
	Huffman* right;
	int count;
	int code;
	operator int() const {return count;}
};
class CWinZip
{
public:
	CWinZip(void);
    bool GetPath(const bool& in,CString& path,CString&n);
	void GetProgCtrl(CProgressCtrl *ProgCtrl){m_ProgCtrl=ProgCtrl;}
	bool Zip();
	bool ReZip();
public:
	~CWinZip(void);
private:
	Huffman *x;
	CString m_Path;
    CString m_dePath;
private:
	//CFile *m_file;
	CStake *sk;
	bool CountWeight(const UINT& size,unsigned char*pbuf);
	unsigned char* m_CountedCode;//频率不为零的元素
	int* m_AllCode;   //256大小的ascii编码在频率不为零的元素的数组中的位置
	int* m_CountedMem;//256大小的统计频率的数组
	int* m_huffmanCodeWide;//频率不为零的元素的huffamn编码的长度
	int* m_MemSign;//被编码元素的编码数组标号
	//建huffman树时一个字符是否是一个字节
	byte * m_AllCodeArrary;//huffman编码数组
	Huffman * Min(Huffman *huff,int num,bool *reached,bool& Empty);
	void Insert(const Huffman &mem,Huffman *huff,int num,bool*reached);
	bool PreOrder(Huffman *root,int& CodeNo,int& ArrayNo,const int & huffArraysize);
	int Translate(unsigned char* from,byte*to,int& SourceSize,unsigned long & ArraySize);
     CProgressCtrl *m_ProgCtrl;
	bool BuildTree(int& CodeSize,int& AsciiSize,Huffman *&x);
	int reversion(byte* Code,unsigned char*& Ascii,unsigned long & num,UINT size,Huffman *&temp);
	int EndSigned;
};
#endif

⌨️ 快捷键说明

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