Преобразование символьного буфера в целое число (arduino)

РЕШИТЬ:

Вы можете изменить буфер символов, используя:

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

0

Решение

Цитировать 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
0

Другие решения

Для преобразования char* в int использование atoi() функция.
http://www.cplusplus.com/reference/cstdlib/atoi/

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector