2012-07-02 65 views
1

为什么表达:变换串/焦炭到UINT8

test = cast(strtrim('3'), 'uint8') 

产生51?

这也适用于:

test = cast(strtrim('3'), 'int8') 

感谢。

+2

因为51是'3'的ASCII值? –

+0

够公平的。有道理。谢谢。 – cs0815

回答

3

因为51是字符'3'ASCII code

如果你想将字符串转换为数字3,你应该使用

uint8(str2double('3')) 

注意str2double会忽略尾随空格,使strtrim是没有必要的。

EDIT

当字符串是在数字运算中使用,MATLAB自动将其转换到其ASCII值。例如

>> '1'+1 
ans = 
    50 
+1

您可以使用最后一个属性轻松地将字符串数字转换为数字:'strnumbers ='1234567890';''strnumbers-'0''返回数组''1 2 3 4 5 6 7 8 9 0]' –

+0

但必须要小心,因为'0'-0'返回48. – Jonas

+0

你是不是指'0 -'0''返回-48?确实如此,但也适用于任何函数,例如:'str2double(0)返回'NaN'这是开发人员/程序员做出正确的实现并在必要时捕获不正确的输入。 –

1

这是因为'3'被看作是matlab的ASCII字符。通过将一个有符号或无符号整数(在这种情况下是8位)进行转换,您要求Matlab将ASCII'3'转换为十进制数。在这种情况下,十进制数字是51.如果你想看更多的转换here是一个基本的文件。