4

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

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

sprintf('%d',A) - '0'  

哪个转换了[1024]-> [1, 0, 2, 4]

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

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

 97 96 98 100

这让我更加困惑,谁能解释一下?

4

2 回答 2

4

当使用运算符时,它利用了从 char 数组到 double 数组的自动转换-。请记住,每个字符都有一个 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]

于 2013-08-08T08:56:02.000 回答
2

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

另外,matlab 中的字符串其实是一个字符数组,所以 if A = '1024'then A(1) = '1'.

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

于 2013-08-08T09:05:13.237 回答