2014-05-24 2 views
0

РЕШИТЬ:Преобразование буфера символов в целое число (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

http://stackoverflow.com/questions/10204471/convert-char-arra y-to-a-int-number-in-c – Pavel

+0

Это не то, как вы конвертируете символ 'char *' в 'int'. – WhozCraig

+0

попробуйте выполнить печать на stdout в дополнение к последовательному порту, чтобы вы могли исключить любые проблемы с подключением. – Pavel

ответ

0

Сошлемся WhozCraig: Это не то, как вы преобразовать символ * к Int

простой бросок не делает, потому что символ является 1 байт и ИНТ 4 байта, поэтому остальные 3 байта может содержать любой мусор приводит к непредсказуемым результатам:

char s[1] = {'2'}; 

cout << s << endl; 
cout << (int)s << endl; 
cout << atoi(s) << endl; 

ведет на моей машине

2 
-5760069 
2