РЕШИТЬ:
Вы можете изменить буфер символов, используя:
char *arg;
arg = SCmd.next();
int i;
sscanf(arg, "%d", &i);
Serial.print("String value ");
Serial.println(arg);
Serial.print("Integer value ");
Serial.println(i);
ПРОБЛЕМА:
Я не могу понять, как изменить содержимое буфера символов в целое число из сохраненной строки.
Например:
«1» должно быть 1,
«121» должно быть 121
Вот что я попробовал.
void doIt()
{
char *arg;
arg = SCmd.next(); // Get the next argument from the SerialCommand object buffer
if (arg != NULL) // As long as it existed, do it
{
int argInted = (int)arg; // Cast char arg* -> int argInted.
Serial.print("String value ");
Serial.println(arg);
Serial.print("Integer value ");
Serial.println(argInted); // Print this new found integer.
}
else {
Serial.println("Fix your arguements");
}
}
Вот то, что я получаю, это оценивает до 371 каждый раз. Я храню разные вещи в буфере указателя, какие-нибудь идеи о том, как конвертировать?
Arduino Ready
> INPUT 1
String value 1
Integer value 371
> INPUT 2
String value 2
Integer value 371
> INPUT WHATSthisDO
String value WHATSthisDO
Integer value 371
Цитировать WhozCraig: это не то, как вы конвертируете char * в int
Простое приведение не подходит, потому что char — 1 байт, а int — 4 байта, поэтому оставшиеся 3 байта могут содержать любой мусор, приводящий к непредсказуемым результатам:
char s[1] = {'2'};
cout << s << endl;
cout << (int)s << endl;
cout << atoi(s) << endl;
приводит на моей машине
2
-5760069
2
Для преобразования char*
в int
использование atoi()
функция.
http://www.cplusplus.com/reference/cstdlib/atoi/