无损压缩软件实现实验报告.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE \* MERGEFORMAT12 无损压缩软件实现实验报告 学院:信息科学与技术学院 专业:通信工程 年级:2013级 姓名:邹明宇 学号日期:2015年9月 无损压缩软件实现实验报告 软件实现原理 原理简介 普通的文本文件中多是使用定长的8bit编码来记录一个字符,如果使用哈夫曼树来获得哈夫曼编码来获得不同的变长编码,然后对于出现次数多的字符使用短的编码,而出现次数少的编码就可以使用长的编码,就可以实现普通的文本文件的压缩。 可以通过以下的过程来构建哈夫曼树和获得哈夫曼编码: 将文本文件中出现的字符按照出现次数从少到多排序形成队列; 将出现次数最少的两个字符从队列中删除,然后作为左右子节点,构建一个子树,并且子树根结点为两个子节点出现次数的和; 将该子树的根结点添加到插入到原队列中,并且使原队列保持从小到大的排列; 重复步骤②、③直到将队列中的所有元素都整合到一棵树中为止; 从树的根结点开始,向左子树读获得编码0,向右子树读获得编码1,直到读到叶节点,则从根结点到该叶节点的路径就为该叶节点字符的编码。 任何文件都可以用二进制的方式打开,获得里面内容的二进制编码。如果文件内容都可以按照一个字符一个字符地读出来,则整个文件最多只会有28=256种字符。 软件流程 dos界面主函数流程图 压缩算法流程图 解压算法流程图 压缩文件结构 在实验时构建压缩文件结构时,考虑到了以下问题: 压缩的文件解压之后要能够得到与原来的完全相同的文件,如果直接使用压缩文件的文件名作为解压所得文件的文件名的话,可能会因为压缩文件被重命名而到时解压所得的文件也被重命名,所以要将原文件的文件名写入到压缩文件中。又考虑到如果将文件名写入到压缩文件中间或尾部,会造成文件名与文件内容的混合,所以选择将文件名写在压缩文件的头部,先写压缩文件的文件名长度,再写入文件名,如此解压时可通过文件名长度直接获取特定的数量的字符来获得文件名。 为了正确地在解压时获得原来的编码信息,应在压缩文件中做好相关记录,因为考虑到字???的编码可能较长而造成压缩率的下降,所以采用在文件中写入字符出现次数的方法来记录。 为了提高压缩率,在记录字符前,可以写入记录字符出现次数最少所需的bit数,因为程序中计算字符次数所用的变量是unsigned long型的,占空间32bit,所以记录所需最小bit数只需5bit(25=32)。 为了能够正确获取到出现的字符而不越界,还需在记录字符前先记录字符种数。 记录数目的数据都是从1开始,为了能够充分地利用空间,将数目数据都减1后在写入文件中,这样8bit的位置就可以记录0~255的共256个数据了。所以前面所说到的原文件名长度,字符种数,记录字符出现次数所需的最小bit数和字符出现次数均做减1处理后再写入文件。 因为编码长度不一,输出文件写到最后时可能会不够8bit,所以程序中每写入任何bit的数据都要计算文件共写了多少bit,然后在文件末尾写到最后一个字节,通过在后面补零的方法,补足8bit,然后输出8bit,该8bit为补零数,如果刚好够8bit,也需要在最后一位写入0以表示补零数为0。 由此可以得到压缩文件的文件结构如下: 原文件名长度-1(8bit)+文件名字符串(8bit/字符)+字符种数-1(8bit)+存储字符出现次数所需最少bit数-1(5bit)+字符1(8bit)+字符1出现次数(所需最少bit数)+字符2(8bit)+字符2出现次数(所需最少bit数)+···+字符n(8bit)+字符n出现次数(所需最少bit数)+文件编码+补零(小于8bit)+补零数(8bit)。 软件使用说明 实验中所编写的程序包括两个版本,分别是dos界面版本和MFC窗口界面版本,两者的代码实现都是基于实验时所编写的两个类:zip类和unzip类,所以两个软件可以通用,下面为两个版本的使用说明: dos界面版本使用说明: 打开.exe可执行文件,首先出现的是欢迎界面: 欢迎界面等待一两秒之后自动进入以下的菜单选择界面,用户可以通过输入所需要执行的功能前的字符进行相关的操作,如果输入的字符不对,软件会提示错误,并且要求用户重新输入,直到输入正确为止。 输入字符‘a’进入压缩文件操作,直接输入软件所在目录下的文件名或者文件路径文件名都可以进行压缩,输入的文件不存在,软件会提示文件不存在,文件正常压缩完之后会提示文件压缩完成,输出压缩所得的文件以及原文件的大小,压缩文件的大小和压缩比,然后提示的输出路径下可以找到.huf类型的压缩文件。 压缩完之后,按任意键直接返回软件的菜单选择主界面,输入‘b’即可进行解压操作,解压时同样要求输入要解压的文件,且解压的文件的文件类型必须为.huf,否则会提

文档评论(0)

1243595614 + 关注
实名认证
文档贡献者

文档有任何问题,请私信留言,会第一时间解决。

版权声明书
用户编号:7043023136000000

1亿VIP精品文档

相关文档