资源简介
基于Qt实现的霍夫曼编码的压缩解压缩程序。压缩、解压缩采用单独一个线程,ui界面一个线程。
代码片段和文件信息
#include “huffman.h“
Huffman::Huffman(QThread *parent) :
QThread(parent)
{
for(int k=0;k<256;k++)
{
for(int mask=128;mask>0;mask/=2)
{
if((k&mask)==0) dic[k].append(“0“);
else dic[k].append(“1“);
}
}
}
void Huffman::run()
{
if(isCompress)
{
this->ComAnalyse();
this->GenerateCompressFile();
emit message(“Compress Complete!“);
}
else
{
this->DecomAnalyse();
emit message(“Decompress complete!“);
}
}
void Huffman::Compress(QString comFile QString after)
{
if(comFile==after)
{
emit error(“The input file name and the output file name cann‘t be the same!“);
return;
}
inFile.setFileName(comFile);
outFile.setFileName(after);
if(!CheckFile()) return;
isCompress=true;
this->start();
}
void Huffman::Decompress(QString decomFile QString after)
{
if(decomFile==after)
{
emit error(“The input file name and the output file name cann‘t be the same!“);
return;
}
inFile.setFileName(decomFile);
outFile.setFileName(after);
if(!CheckFile()) return;
isCompress=false;
this->start();
}
bool Huffman::CheckFile()
{
if(!inFile.exists())
{
emit error(“File doesn‘t exist!“);
return false;
}
if(outFile.exists())
{
return QMessageBox::question(NULL“OverWrite?““File exists! OverWrite it?“);
}
return true;
}
void Huffman::ComAnalyse()
{
statisticMap.clear();
char c;
inFile.open(QIODevice::ReadOnly);
emit message(“Analysing File!“);
while(!inFile.atEnd())
{
inFile.getChar(&c);
if(statisticMap.contains(c)) statisticMap[c]++;
else statisticMap[c]=0;
}
emit message(“Generating Huffman Tree!“);
tree.Generate(statisticMapcodeMap);
inFile.close();
}
void Huffman::GenerateCompressFile()
{
emit message(“Generating compressed file!“);
outFile.open(QIODevice::WriteOnly);
QByteArray headercontent;
char c;
int mapSize=codeMap.size();
int zero=0;
inFile.open(QIODevice::ReadOnly);
while(!inFile.atEnd())
{
inFile.getChar(&c);
content.append(codeMap[c]);
}
zero=8-content.size()%8;
if(zero==8) zero=0;
for(int i=0;i header.append((char)zero);
header.append((char)mapSize);
QMap::iterator it;
for(it=codeMap.begin();it!=codeMap.end();it++)
{
header.append(it.key());
header.append(this->formatCodeMap(it.value()));
}
outFile.write(header);
bool ok;
QByteArray after;
after.clear();
for(int i=0;i {
after.append((char)content.mid(i8).toInt(&ok2));
emit progress((i*100)/content.size());
}
emit progress(100);
outFile.write
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 308 2014-11-25 02:46 HuffmanCompress\.git\config
文件 73 2014-11-25 02:45 HuffmanCompress\.git\desc
文件 103 2014-11-25 15:03 HuffmanCompress\.git\FETCH_HEAD
文件 23 2014-11-25 02:45 HuffmanCompress\.git\HEAD
文件 177 2014-11-25 02:45 HuffmanCompress\.git\hooks\README.sample
文件 992 2014-11-25 15:02 HuffmanCompress\.git\index
文件 113 2014-11-25 02:45 HuffmanCompress\.git\info\exclude
文件 511 2014-11-25 15:02 HuffmanCompress\.git\logs\HEAD
文件 511 2014-11-25 15:02 HuffmanCompress\.git\logs\refs\heads\master
文件 137 2014-11-25 02:46 HuffmanCompress\.git\logs\refs\remotes\origin\master
文件 178 2014-11-25 02:45 HuffmanCompress\.git\ob
文件 385 2014-11-25 02:46 HuffmanCompress\.git\ob
文件 389 2014-11-25 14:59 HuffmanCompress\.git\ob
文件 231 2014-11-25 15:02 HuffmanCompress\.git\ob
文件 217 2014-11-25 02:45 HuffmanCompress\.git\ob
文件 256 2014-11-25 02:46 HuffmanCompress\.git\ob
文件 626 2014-11-25 14:59 HuffmanCompress\.git\ob
文件 367 2014-11-25 02:45 HuffmanCompress\.git\ob
文件 1697 2014-11-25 14:59 HuffmanCompress\.git\ob
文件 2616 2014-11-25 02:46 HuffmanCompress\.git\ob
文件 325 2014-11-25 02:46 HuffmanCompress\.git\ob
文件 151 2014-11-25 02:45 HuffmanCompress\.git\ob
文件 707 2014-11-25 14:59 HuffmanCompress\.git\ob
文件 89 2014-11-25 02:45 HuffmanCompress\.git\ob
文件 442 2014-11-25 14:59 HuffmanCompress\.git\ob
文件 389 2014-11-25 02:46 HuffmanCompress\.git\ob
文件 141 2014-11-25 02:46 HuffmanCompress\.git\ob
文件 557 2014-11-25 02:46 HuffmanCompress\.git\ob
文件 589 2014-11-25 02:46 HuffmanCompress\.git\ob
文件 171 2014-11-25 02:46 HuffmanCompress\.git\ob
............此处省略58个文件信息
相关资源
- 未压缩与压缩的dicom文件
- 定时自动压缩备份文件并发送电子邮
- 破解加密压缩包
- 自动截拼图工具适合做地图等-地图
- 压缩感知TwIST
- PFC 3D 3.0三轴压缩建模
- ARCHPR-4.5.4压缩包密码破解器,字典
- 卷积神经网络的压缩和加速
- 三维可压缩流场MPI+OpenMP混合并行算法
- pako gzip 压缩和解压缩支持中文
- Js算法 zip_deflate(压缩)与zip_inflate(
- Archiver For Mac v3.0.3 序列号
- RAR压缩软件 (RAR解压软件)
- 摩登国际客户相册图片批量压缩工具
- zip压缩文件 破解密码字典
- 霍夫曼编码及香农编码课程设计
- 压缩包ara密码破解器
- 薛毅《统计建模与R软件》各章节R源码
- ZLIB解压缩STM32工程
- winrar 64位解压缩
- 视频压缩编码H.264源代码
- 非局部正则化的压缩感知图像重建算
- TIMIT语音库压缩包
- data.rar BIO标注语料压缩包 可用
- 哈夫曼树实现图片压缩与解压
- PDF压缩工具 PDFshrink破解版
- 图像与视频压缩技术讲义.rar
- 适用XP、2003的集成AHCI驱动的7z压缩包
- 霍夫曼编码与解码
- 压缩文件密码破解 Advanced Archive Pass
评论
共有 条评论