【发布时间】:2012-07-02 14:37:53
【问题描述】:
为什么会这样表达:
test = cast(strtrim('3'), 'uint8')
生产 51?
这也适用于:
test = cast(strtrim('3'), 'int8')
谢谢。
【问题讨论】:
-
因为 51 是 '3' 的 ascii 值??
-
很公平。有点道理。谢谢。
为什么会这样表达:
test = cast(strtrim('3'), 'uint8')
生产 51?
这也适用于:
test = cast(strtrim('3'), 'int8')
谢谢。
【问题讨论】:
因为 51 是字符 '3' 的 ASCII code。
如果要将字符串转换为数字 3,则应使用
uint8(str2double('3'))
请注意str2double 将忽略尾随空格,因此strtrim 不是必需的。
编辑
在数值运算中使用字符串时,Matlab 会自动将其转换为其 ASCII 值。例如
>> '1'+1
ans =
50
【讨论】:
strnumbers='1234567890'; strnumbers-'0' 返回数组 [1 2 3 4 5 6 7 8 9 0]
'0'-0 返回 48。
0-'0' 返回 -48 吗?没错,但这也适用于任何函数,例如:str2double(0) returns NaN` 开发人员/程序员需要做出正确的实现并在必要时捕获错误的输入。
因为 51 是字符 '3' 的 ASCII value。
【讨论】:
这是因为 '3' 在 matlab 中被视为 ASCII 字符。通过转换为有符号或无符号整数(在这种情况下为 8 位),您要求 Matlab 将 ASCII '3' 转换为十进制数。在这种情况下,十进制数是 51。如果您想查看更多转换,here 是一个基本文档。
【讨论】: