compress.asv
上传用户:xxhxxny
上传日期:2021-02-19
资源大小:87k
文件大小:1k
- %=========================================
- % 文件压缩,将huffman码保存在压缩文件头部
- %
- % Huffman编码的过程是:
- % (1) 统计输入文本文件中各个字符出现的频度: 调用input_count函数实现;
- % (2) 根据字符频度,构建Huffman树: 调用build_tree函数实现;
- % (3) 依据Huffman树,生成各个字符的Huffman编码: 调用gen_code函数实现;
- % (4) 将输入文本中的字符对应huffman编码逐个写入压缩文件中: 调用write_bin函数实现.
- %=========================================
- function [] = compress(file2compress,fileziped)
- if nargin<1 % nargin是程序的输入参数,类似于C中的argc参数
- disp('usage: compress your_orignial_filename [your_dest_filename]');
- return;
- end
- if nargin<2
- fileziped=strcat(file2compress,'.bin');
- end
- fid_in = fopen(file2compress);%打开待压缩的文件
- if fid_in==-1
- disp('Sorry,input file open failed!');
- return;
- end
- fid_out= fopen(fileziped,'w');%打开压缩文件
- if fid_out==-1
- disp('Sorry,output file open failed!');
- fclose(fid_in);
- return;
- end
- prob=input_count(fid_in); % (1) 统计输入文本文件中各个字符出现的频度
- [huffman_tree,index_tree]=build_tree(prob); % (2) 根据字符频度,构建Huffman树
- disp('generating huffman code...');
- hufcode.code = zeros(1,256); %定义数组
- hufcode.bits = zeros(1,256); %定义数组
- hufcode=gen_code(huffman_tree,index_tree,0,0,hufcode); % (3) 依据Huffman树,生成各个字符的Huffman编码
- disp('completed!');
- write_bin(fid_in,fid_out,hufcode,prob); % (4) 将输入文本中的字符对应huffman编码逐个写入压缩文件中: 调用write_bin函数实现.
- fclose(fid_in);
- fclose(fid_out);