Arduino的:字符串int获取奇怪值(Arduino: String to int gets s

2019-09-17 08:32发布

我想转换一个Stringint ,以及所有我能找到的是,您必须将字符串转换为字符数组,然后施放此数组的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是2225一个int? 我做了什么错在这里?

Answer 1:

你需要使用函数int value = atoi(valueArray); 其中valueArray是空终止字符串。



Answer 2:

甚至有一个(无证) toInt()在String类方法:

INT敏= myString.toInt();



Answer 3:

所述toInt()方法是在这方面是非常有用的,但我发现它是能够转换长度五个或更少的唯一的字符串,尤其是小于65535作为其最大值INT可以采取的值。 在这个价值,它只是给随机数(溢出值)。 当您使用此方法,因为它杀死了我很多有用的时间来想出解决办法,请注意这一点。 希望能帮助到你。



文章来源: Arduino: String to int gets strange values