我正在寻找一种在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
这让我感到困惑,任何人都可以解释这个问题吗?
答案 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类型。