Arduino: String для int получает странные значения
Я хочу преобразовать String
для int
, и все, что я мог найти, это то, что вы должны преобразовать строку в массив символов, а затем привести этот массив к 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
Я ожидал получить int со значением 100, но фактическое значение int - 2225?! Что я здесь не так сделал?
3 ответа
Вам нужно использовать функцию int value = atoi(valueArray);
где valueArray
is a null terminated string.
Существует даже (без документов) toInt()
Метод в классе String:
int myInt = myString.toInt ();
Метод toInt () очень полезен в этом аспекте, но я обнаружил, что он может преобразовывать только строки длиной пять или меньше, особенно значение меньше 65535, поскольку его максимальное значение int может принимать. При превышении этого значения он просто дает случайные числа (переполнение значений). Пожалуйста, помните об этом, когда вы используете этот метод, так как он убил много моего полезного времени, чтобы понять это. Надеюсь, поможет.