РЕШИТЬ:
Вы можете изменить буфер символов, используя:
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
Для преобразования функции char*
в int
используется функция atoi()
. http://www.cplusplus.com/reference/cstdlib/atoi/
Чтобы привести 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
.