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

0

РЕШИТЬ:

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

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
    stackoverflow.com/questions/10204471/...
  • 0
    Это не то, как вы конвертируете char* в int .
Показать ещё 2 комментария
Теги:
arduino
arduino-uno

2 ответа

0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню