求 MATLAB 数字转换程序!
来源:学生作业帮 编辑:大师作文网作业帮 分类:综合作业 时间:2024/11/11 18:58:33
求 MATLAB 数字转换程序!
我的问题是这样的:现在有一些数字,比如5926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317
这些只是一堆连续的数字而已,整体并不是一个很大的数!
我要做一个变换,按照规则:
0=000,1=01,2=010,3=011,4=100,5=101,6=110,7=111,8=1000,9=1001
进行转换.转换后是一堆0,1数字组成的连续数字.然后再做:
每16个数字一截,将这16个由0,1组成的二进制转换成10进制数,并输出.
以上整个过程需要用MATLAB来实现,事后会再返100财富值的!
我的问题是这样的:现在有一些数字,比如5926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317
这些只是一堆连续的数字而已,整体并不是一个很大的数!
我要做一个变换,按照规则:
0=000,1=01,2=010,3=011,4=100,5=101,6=110,7=111,8=1000,9=1001
进行转换.转换后是一堆0,1数字组成的连续数字.然后再做:
每16个数字一截,将这16个由0,1组成的二进制转换成10进制数,并输出.
以上整个过程需要用MATLAB来实现,事后会再返100财富值的!
src='5926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317';
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%编码,即
%0->000 1->001
for i=0:9 %0到9这十个数字
code{i+1}=dec2bin(i,3); %最少是三位二进制代码(否则2会编码成10,而不是010),注意数组角标从1开始
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dst=[]; %用来保存二进制流,初始化为空矩阵
for i=1:length(src) %转换src中第i个字符
%首先src(i)是字符变量,str2num(src(i))将字符转成相应的数字,code中角标被我们加1处理.
%故str2num(src(i))+1,src中第i个字符的编码在code中的位置,于是code{str2num(src(i))+1}就是相应的编码
%dst=[dst,code{str2num(src(i))+1}],将src中第i个字符的编码加入到dst数组中,组成一串
dst=[dst,code{str2num(src(i))+1}];
end
n=length(dst); %dst的二进制长度
m=floor(n/16); %n除以16,向下取整(去掉小数点后面的数),小学整数除法的商(不要余数)
if mod(n,16)~=0 %余数不为零,即有多余数位,这里删除
dst(m*16+1:n)=[]; %从m*16+1个字符开始删除,直至最后一个字符
end
dst=reshape(dst,16,m)'; %先将dst转成16行m列的矩阵,再转置过来就是m行16列的数据.其中涉及到MATLAB的列优先
%将16位数字转成十进制,bin2dec函数,可将每一行的二进制转成相应的十进制代码
data=bin2dec(dst)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%编码,即
%0->000 1->001
for i=0:9 %0到9这十个数字
code{i+1}=dec2bin(i,3); %最少是三位二进制代码(否则2会编码成10,而不是010),注意数组角标从1开始
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dst=[]; %用来保存二进制流,初始化为空矩阵
for i=1:length(src) %转换src中第i个字符
%首先src(i)是字符变量,str2num(src(i))将字符转成相应的数字,code中角标被我们加1处理.
%故str2num(src(i))+1,src中第i个字符的编码在code中的位置,于是code{str2num(src(i))+1}就是相应的编码
%dst=[dst,code{str2num(src(i))+1}],将src中第i个字符的编码加入到dst数组中,组成一串
dst=[dst,code{str2num(src(i))+1}];
end
n=length(dst); %dst的二进制长度
m=floor(n/16); %n除以16,向下取整(去掉小数点后面的数),小学整数除法的商(不要余数)
if mod(n,16)~=0 %余数不为零,即有多余数位,这里删除
dst(m*16+1:n)=[]; %从m*16+1个字符开始删除,直至最后一个字符
end
dst=reshape(dst,16,m)'; %先将dst转成16行m列的矩阵,再转置过来就是m行16列的数据.其中涉及到MATLAB的列优先
%将16位数字转成十进制,bin2dec函数,可将每一行的二进制转成相应的十进制代码
data=bin2dec(dst)