Matlab 中的数制转换

Number-system conversion in Matlab

我为 MatLab 编写了以下程序,将数字从十进制系统转换为其他系统,基数从 2(二进制)到 16(十六进制)。当程序从基数 10 开始转换为系统时,我遇到了问题。在这种情况下,余数必须以某种方式编写,例如 10=A11=B 等等。怎么可能做到?我应该为此目的使用 switch-case 吗?谢谢!

clc
clear all
dec = input('dec=');
n = input('select number system n=');
if n>=2 && n<=16
    i = 0;
    p=dec;
    while p>0
        dec=p;
        i = i + 1;
        p = fix(dec/n);
        r = mod(dec, n);
        base(i) = num2str(r);
    end
    base = fliplr(base);
    disp(['base=' num2str(base)]);
else
    disp('error');
end

此函数作为内置函数存在 dec2base。如果您通过

查看其源代码
edit dec2base

您将看到此函数首先构建一个数字向量,然后使用它对字符数组进行索引 symbols = '0123456789ABCDEFG...'。您可以使用相同的方法代替 num2strbase(i) = symbols(r+1) 应该这样做。

顺便说一句:

  • disp 行中,您正在对已经是字符串的内容使用 num2str
  • 您实际上可以通过 error('Choose base b as 2<=b<=16').
  • 生成错误消息,而不是使用 disp('error')
  • 您可以使用 base(end+1) = ... 而不是 base(i) 来删除变量 i