用matlab解决问题

十六进制数转八进制(禁用函数),提示:可以先将十六进制数转换成某进制数,再由某进制数转换成八进制。

0-0000
1-0001
2-0010
3-0011
4-0100
5-0101
6-0110
7-0111
8-1000
9-1001
a-1010
b-1011
c-1100
d-1101
e-1110
f-1111
按这个遍历把16进制转换二进制,然后三个一组合就是八进制

你好,先转换成10进制,再转化成八进制

a = '123A';
% 先转10进制数
a = upper(a);
p = a<='9' & a>='0';
b = double(a);
b(p) = b(p) - double('0');
b(~p) = b(~p) - double('A') +10;
s = 0;
for i = length(b):-1:1
s = s + 16^(length(b)-i)*b(i);
end
% 再转化成八进制数
t = [];
while(s~=0)
q = mod(s,8);
s = (s-q)/8;
t = [q, t];
end
t = char(t+'0')

本例中的结果为

t =

    '11072'


function res=bin2tri(msg)
%进制转换程序
 
%Inputs
%%% msgLen   :   需要转换的数据位数
 
%Outputs
%%% res      :   求解的余数矩阵,也就是求解后的存放结果的矩阵
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%                   算法原理                       %
%       数字较小的时候可以采取除k取余的方法          %
% 数字位数较大的时候需要模拟除法的原理来进行计算求解  %
%           本算法中一律采用大数求解法              %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%                    例子                         %
%               (1001)2=(100)3                    %
%第一次                                           %
%1001/3,从千位开始求解。千位:1/3=0,余数为1       %
%                       百位:(1*2)/3=0,余数为2   %
%                       十位:(2*2)/3=1,余数为1    %
%                       个位:(1*2+1)/3=1,余数为0 %
%第二次                                            %
%11/3,从十位开始。       十位:1/3=0,余数为1       %
%                       个位:(1*2=1)/3=1,余数为0 %
%第三次                                            %
%1/3,从个位开始。        个位:1/3=0,余数为1       %
%第四次                                            %
%0/3,结束                                         %
%逆序取结果,得到100(最终余数)                                %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% msg=[1 0 0 1];
% msg=randint(1,msgLen);
%原始进制
oldbase=2;
%新进制
newbase=3;
% 验证结果正确性
% old=0;
% new=0;
% 求oldbase进制对应的值
% for i=1:size(msg,2)
%     old=old*oldbase+msg(i);
% end
%退出条件,被除数位数为0表示求解结束
%余数个数累加
j=1;
while 0~=size(msg,2)
    temp=0;
    i=1;
    %赋值msg
    n=1;
    %去除ansout中的前置零
    m=1;
    %从最高位逐位求解,模拟除法过程
    while i<=size(msg,2)
        temp=temp*oldbase+msg(i);
        %此处需特别注意matlab求解除法得到的不是int型,需使用fix函数
        ansout(i)=fix(temp/newbase);
        temp=mod(temp,newbase);
        i=i+1;
    end
    %保存余数
    res(j)=temp;
    j=j+1;
    while m<=size(ansout,2) && ansout(m)==0
        m=m+1;
    end
    %消息清零,重新赋值,便于重复上述操作
    msg=[];
    for i=m:size(ansout,2)
        msg(n)=ansout(i);
        n=n+1;
    end
    ansout=[];
end
res=rot90(res,2);
% 求newbase对应的值
% for i=1:size(res,2)
%     new=new*newbase+res(i);
% end
end

matlab ,可以。
第一步,
十六进制转换为十进制,在命令行窗口中输入hex2dec() 函数。
第二步,
十进制转换为八进制,在命令行窗口中输入dec2base(x,8)

https://ask.csdn.net/questions/7480887?spm=1005.2026.3001.5635&utm_medium=distribute.pc_relevant_ask_down.none-task-ask-2~default~OPENSEARCH~Rate-2.pc_feed_download_top3ask&depth_1-utm_source=distribute.pc_relevant_ask_down.none-task-ask-2~default~OPENSEARCH~Rate-2.pc_feed_download_top3ask