【问题标题】:Arduino: String to int gets strange valuesArduino:字符串到 int 得到奇怪的值
【发布时间】:2012-05-20 08:05:04
【问题描述】:

我想将String 转换为int,我只能找到你必须将String 转换为char 数组,然后将此数组转换为int,但我的代码会产生奇怪的值,我无法弄清楚问题是什么。

void ledDimm(String command)
{
    // Get the Value xx from string LEDDimm=xx
    String substring = command.substring(8, command.length());

    Serial.println("SubString:");
    Serial.println(substring);
    Serial.println("SubString Length:");
    Serial.println(substring.length());

    // Create a Char Array to Store the Substring for conversion
    char valueArray[substring.length() + 1];

    Serial.println("sizeof ValueArray");
    Serial.println(sizeof(valueArray));

    // Copy the substring into the array
    substring.toCharArray(valueArray, sizeof(valueArray));

    Serial.println("valueArray:");
    Serial.println(valueArray);

    // Convert char array to an int value
    int value = int(valueArray);

    Serial.println("Integer Value:");
    Serial.println(value);

    // Write the Value to the LEDPin
    analogWrite(LEDPin, value);
}

串行输出如下所示:

Received packet of size 11
From 192.168.1.4, port 58615
Contents:
LEDDimm=100
SubString:
100
SubString Length:
3
sizeof ValueArray
4
valueArray:
100
Integer Value:
2225

我希望得到一个值为 100 的 int,但实际的 int 是 2225?!我在这里做错了什么?

【问题讨论】:

    标签: string int type-conversion arduino


    【解决方案1】:

    String 类中甚至还有一个(未记录的)toInt() 方法:

    int myInt = myString.toInt();

    【讨论】:

    【解决方案2】:

    您需要使用函数int value = atoi(valueArray);,其中valueArray 是一个以空值结尾的字符串。

    【讨论】:

      【解决方案3】:

      toInt() 方法在这方面非常有用,但我发现它只能转换长度为 5 或以下的字符串,尤其是小于 65535 的值,因为它是 int 可以取的最大值。在这个值上,它只给出随机数(溢出值)。使用此方法时请注意这一点,因为它浪费了我很多有用的时间来解决这个问题。希望能帮助到你。

      【讨论】:

      • 这应该是评论而不是答案,因为它没有回答问题。
      猜你喜欢
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多