Arduino: String to int gets weird values

I want to convert Stringto int, and all I could find is that you need to convert the String array to a char array, and then apply that array to int, but my code produces strange values ​​and I can't figure out what the problem is.

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);
}

And the serial output is as follows:

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

I was expecting to get an int with a value of 100, but the actual int is 2225? What have I done wrong here?

+3
source share
3 answers

You need to use a function int value = atoi(valueArray);where valueArrayis a zero-terminated string.

+7
source

In the String class, there is even a (undocumented) method toInt():

int myInt = myString.toInt();

+11

The toInt () method is very useful in this aspect, but I found that it can only convert strings of five or less in length, especially a value less than 65535, since its maximum int value can take. By this value, it simply gives random numbers (overflowing values). Keep this in mind when you use this method, since it killed a lot of good time to figure it out. Hope it helps.

+1
source

All Articles