【问题标题】:How do solve this warning?如何解决这个警告?
【发布时间】:2016-07-22 15:14:47
【问题描述】:

我不知道如何解决这个警告:

警告:从数字到字符的隐式转换

我想调试我的代码,我认为警告是由这行代码引起的:

   % Append the hexadecimal representation of the current array element

    line = [line, '0x',lower(dec2hex(hex_array(i,j),2)), ' '];

此警告在执行时不会导致任何问题。但是,我需要验证我的结果,而这个结果不允许我这样做。

如果您能帮助我,我将不胜感激。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    您正在连接一个字符串和一个数字。在 MATLAB 中,当你这样做时,它将implicitly convert the number to a string,因为字符数组具有优先级。要确定用于数字的 what 字符串,它使用ASCII 代码。

    ['string', 45]
    %   string-
    

    为避免出现警告,您应该在连接之前将您的数字显式转换为字符串。如果您希望数字作为字符串,请使用num2strsprintf 创建它。

    ['string', num2str(45)]
    %   string45
    

    如果您确实想要 ASCII 等价物,只需将其包装在对 char 的调用中以将其显式转换为字符串

    ['string', char(45)]
    %   string-
    

    【讨论】:

      【解决方案2】:

      您将数字(即lower(...))与字符串(即'0x')连接在一个数组中,因此Matlab必须将您的数字转换为字符串类型并警告您它已经这样做了,您可以如果结果是您想要的,请选择忽略它。

      如果你想避免它,使用 Cell Array:

      line = {line, '0x',lower(dec2hex(hex_array(i,j),2)), ' '};
      

      或者按照@Suever 的建议,将您的数值变量转换为字符以避免出现此警告。即:

      line = [line, '0x',num2str(lower(dec2hex(hex_array(i,j),2))), ' '];
      

      解释:

      Matlab 只允许 Array 是整个 Numeric 或整个 Chars(即 String 类型),在它看到 Array 中的 String 或 Char 的情况下,它会自动将其转换为 Char Array。

      【讨论】:

      • 你可以用[]连接字符串。
      • 是的,只需使用[],但将数字显式转换为字符以避免警告
      • 使用单元格语法可能会产生不必要的副作用(例如,引入不需要的换行符)。实际上,单元格语法的主要用途之一是在图形标签/标题中引入换行符:p
      • @rayryeng 是的,我实际上已经开始编写文档了。
      • 只是在编辑中指出“行”是数字的假设可能是错误的。它更有可能是“01:”之类的东西。如果不是,那么这可能不是预期的字符串输出,因为您 至少 需要在行号和十六进制表示之间有一个空格
      【解决方案3】:

      如果您尝试使用 [str1, str2, str3] 语法连接字符串,如果其中一个对象不是字符串,则会收到该警告。如果“str2”实际上是一个数值矩阵/标量,则可以使用 num2str(str2) 获取字符串表示。

      话虽如此,最好使用 sprintf 来生成该字符串,例如 s = sprintf("A has a value of %d\n", myval);

      【讨论】:

        猜你喜欢
        • 2016-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多