⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lm_huffman.m

📁 本程序在MATLAB环境下
💻 M
字号:
%my_huffman.m

clear all;
[FileName,PathName] = uigetfile('*.txt','Select the TXT-file');
TXTFile = strcat(PathName,FileName);
number = zeros(256,1);
charN = 0;
fid = fopen(TXTFile,'r');
while 1
%     tline = fgetl(fid); %一次读入一行
    tline = fread(fid,1);   %输出自动为数字
    if isempty(tline), 
        break,   
    end
    number(tline+1) =1 + number(tline+1);
    %该字符对应的charHist元素加1,最终是它的总个数
    %disp(tline)
end
fclose(fid);
charN = sum(number);   %字符总数
fprintf('\n原文件大小为:%d字节',charN);
code1 = find(number(:)~=0);%查找在文件中存在的字符对应的ASCII码编号(从1开始计)
pHist = number(code1);
pHist = pHist./sum(pHist);
codeASCII = code1-1;%将sy内的ASCII编号改为从0计
%-------------------------------------------%
dicts = huffmandict(codeASCII,pHist); 
 fc=cell(256,1);
 [m,n] = size(dicts);
 for i=1:m;
     [dex,code]=dicts{i,:};
     fc{dex+1}=code;
 end
 %------------------------------------%
 result=[];
 fid_r = fopen(TXTFile,'r');
 fid_w = fopen('output.dat','w');
while 1
    tline = fread(fid_r,1);   %输出自动为数字
    if isempty(tline), 
        break,   
    end
    code = fc{tline+1,:};   %读入的字符对应的编码
    code_int8 = int8(code);
    result=[result,code_int8];
    fwrite(fid_w,code_int8);
    %disp(tline)
end
fclose(fid_r);
fclose(fid_w);
codeN=length(result);
fprintf('\n编码后序列总长度为%d,文本总大小为%d字节',codeN,ceil(codeN/8));
fprintf('\n压缩比%.4f.\n',charN/(codeN/8));

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -