【问题标题】:transform string/char to uint8将字符串/字符转换为 uint8
【发布时间】:2012-07-02 14:37:53
【问题描述】:

为什么会这样表达:

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

生产 51?

这也适用于:

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

谢谢。

【问题讨论】:

  • 因为 51 是 '3' 的 ascii 值??
  • 很公平。有点道理。谢谢。

标签: string matlab ascii


【解决方案1】:

因为 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` 开发人员/程序员需要做出正确的实现并在必要时捕获错误的输入。
  • @GuntherStruyf:我只是想指出,虽然您的解决方案非常聪明,但它也可能有些错误或误解。
【解决方案2】:

因为 51 是字符 '3'ASCII value

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多