sprintf('%d',A) - '0'如何工作?

时间:2013-08-08 08:52:36

标签: matlab

我正在寻找一种在Matlab中分离数组数字的方法,即 如果A = 1024,那么我希望它是A = [1, 0, 2, 4]

我在网上搜索并找到了这段代码(也发布在标题上):

sprintf('%d',A) - '0'  
转换[1024] - >的

[1, 0, 2, 4]

它确实解决了我的问题,但我不理解它,尤其是- '0'部分。 有人可以解释这是如何工作的吗?

此外,如果我在MATLAB命令窗口中编写sprintf('%d',A) + '0'(对于A = [1024]),则会显示以下内容:

 97 96 98 100

这让我感到困惑,任何人都可以解释这个问题吗?

2 个答案:

答案 0 :(得分:4)

当使用-运算符时,它利用从char数组到双数组的自动转换。请记住,如果键入,每个字符都有一个ascii值 在命令行中double('0'),您会看到48作为答案。虽然double('1024')为您提供

ans =

   49   48   50   52

sprintf('%d', A)只需将整数转换为字符串(即char数组)。减号会使双方都加倍,所以你最终得到了

double('1024') - double('0')

[49, 48, 50, 52] - [48]

最终为[1,0,2,4]

从这里开始,应该清楚为什么添加'0'导致[97, 96, 98, 100]

答案 1 :(得分:2)

命令sprintf('%d',A)将整数A=1024转换为数字'1024'的字符串表示形式。

另外,matlab中的字符串实际上是一个字符数组,所以如果A = '1024'那么A(1) = '1'

其余的解释来自@Dan发布的答案。当数字操作(+ - * / mod ^ ...)应用于字符数组时,它们将转换为等效数字根据ASCII码表示,将数组格式保留为double类型。