该程序一共有两个类,一个压缩类一个解缩类,分别封装了将文件流包括
在内的操作.另外有两个结构的数组,分别在压缩和解压过程中用以存树.
压缩部分声明:
① 压缩后文件的结构:
1. 第一部份记录着源文件的总长度,占了4个字节的的位置
2. 第二部份记录着压缩后文件存放树的开始位置,同样占了4个字节的位置
3. 第三部份记录着文件的压缩信息,不停地读,然后将前后两个字符的编码合
并,以8位为基本单位写入文件
4. 这是树的开始位置,以每个字符为单位,包含有这个字符,还有他的编码的
长度,以及编码
② 建树以及编码
1. 按照哈夫曼树的原理,进行建树后,用一个循环对每一个叶子节点进行编码
压缩时小细节的实现说明:
先依次读取源文件中的字符,然后从中找到编码信息,由 getcode 完成这
个功能;将编码连接进缓冲区,函数 strcont 会完成这个工作,这里使用库函
数 strcat 的原因在于,调试中发现,已经被初始化成空的缓冲区,第一次就无
法正常连接,可以里面的空白太多,函数无法处理,strlen 这个函数也无法完
成对缓冲区长度进行计算所以写了个 stringlen 小函数来解决这个连接的问题;
当缓冲区的大小超过了8,对缓冲区的前8位的二进制转换成一个 char,
getdexcode 会完成这个任务.然后再将转换成的 char 写入压缩后的文件中;
当读到文件尾,再处理掉缓冲区最后的编码,用 0 来填满;
在写入树时,源字符直接写入,编码的长度也可以将它直接写入,解压时