compress.asv
上传用户:xxhxxny
上传日期:2021-02-19
资源大小:87k
文件大小:1k
源码类别:

压缩解压

开发平台:

Matlab

  1. %=========================================
  2. % 文件压缩,将huffman码保存在压缩文件头部
  3. %
  4. % Huffman编码的过程是:
  5. % (1) 统计输入文本文件中各个字符出现的频度: 调用input_count函数实现;
  6. % (2) 根据字符频度,构建Huffman树: 调用build_tree函数实现;
  7. % (3) 依据Huffman树,生成各个字符的Huffman编码: 调用gen_code函数实现;
  8. % (4) 将输入文本中的字符对应huffman编码逐个写入压缩文件中: 调用write_bin函数实现.
  9. %=========================================
  10. function [] = compress(file2compress,fileziped)
  11. if nargin<1 % nargin是程序的输入参数,类似于C中的argc参数
  12.     disp('usage: compress your_orignial_filename [your_dest_filename]');
  13.     return;
  14. end
  15. if nargin<2
  16.     fileziped=strcat(file2compress,'.bin');
  17. end
  18. fid_in = fopen(file2compress);%打开待压缩的文件
  19. if fid_in==-1
  20.     disp('Sorry,input file open failed!');
  21.     return;
  22. end
  23. fid_out= fopen(fileziped,'w');%打开压缩文件
  24. if fid_out==-1
  25.     disp('Sorry,output file open failed!');
  26.     fclose(fid_in);
  27.     return;
  28. end
  29. prob=input_count(fid_in);       % (1) 统计输入文本文件中各个字符出现的频度
  30. [huffman_tree,index_tree]=build_tree(prob); % (2) 根据字符频度,构建Huffman树
  31. disp('generating huffman code...');
  32. hufcode.code = zeros(1,256); %定义数组
  33. hufcode.bits = zeros(1,256); %定义数组
  34. hufcode=gen_code(huffman_tree,index_tree,0,0,hufcode); % (3) 依据Huffman树,生成各个字符的Huffman编码
  35. disp('completed!');
  36. write_bin(fid_in,fid_out,hufcode,prob);  % (4) 将输入文本中的字符对应huffman编码逐个写入压缩文件中: 调用write_bin函数实现.
  37. fclose(fid_in);
  38. fclose(fid_out);