解释在将字符串转换为整数时使用"str - '0'".

AGS*_*AGS 4 string matlab

我注意到一个非常酷的方法来转换字符串,比方说

str = '1234'
Run Code Online (Sandbox Code Playgroud)

向量就是使用这个技巧.

vec = str - '0'
 = [1 2 3 4]
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么这种方法有效?

此外,类似于:

vec1 = str -'1'
  = [0 1 2 3]
Run Code Online (Sandbox Code Playgroud)

vec2 = str - '10'
  Error using  - 
  Matrix dimensions must agree.
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

Jon*_*nas 5

当您使用带有字符串的算术运算符时,Matlab会将字符串转换为双精度数,将字符串转换为ascii值:

>> double('1')
ans =
    49
Run Code Online (Sandbox Code Playgroud)

因此,减法可以正常工作,但添加会产生奇怪的结果

>> '1'+'1'
ans =
    98
Run Code Online (Sandbox Code Playgroud)

将字符串数组转换为double会产生双精度数组,因此"矩阵尺寸必须一致":

>> double('10')
ans =
    49    48
Run Code Online (Sandbox Code Playgroud)

因此,虽然减法'0'因此是一个很酷的捷径,但我建议您使用STR2DOUBLE来避免混淆.