2015-06-04 4 views
0

Мне было интересно, есть ли простой способ добавить строку и int в c. Уловка в том, что я не могу загружать много библиотек, потому что я работаю с arduino, у которого есть небольшое количество памяти.string и int concat in c

Короче, есть ли способ добавить строку и int вместе в arduino?

Мое решение до недо теперь была такой, которая не является элегантны всего:

Serial.print(string); 
Serial.print(seperator); 
Serial.print(integer); 
. 
. 
. 
. 
+2

Если это работает, это не совсем глупо. Тем не менее, 'Serial.print (int)' уже будет вытягивать целочисленное число в процедуру преобразования строк в любом случае, поэтому, если вы вызываете тот же самый, который он использует внутри, дополнительных накладных расходов не будет. – slugonamission

+1

I highliy сомневается, что этот код c. –

+0

@iharob Используется последовательная библиотека Arduino для печати на последовательный порт. – Atrotors

ответ

0
  1. Если вы хотите сделать преобразование просто напечатать выход через последовательный порт, код вам есть, вероятно, лучшее решение, , даже если оно не выглядит элегантным.

  2. Если вы используете String object, когда вы говорите, «String,» вы может преобразовать целое выражение в объект Строка с:

    string + seperator + String(integer) 
    

    Но объект Arduino строка не делает лучше использование памяти , и нет причин для этого, если вы печатаете результат только на последовательный порт.

  3. В качестве альтернативы, вы можете использовать массив C символов, что делает лучше использование памяти, а также функцию itoa от STDLIB, который добавляет около 600 байт. См. printing numbers.

0

Ну, вы можете добавить два целых числа с +, поэтому все, что вам действительно нужно, это способ, чтобы преобразовать строку в целое число. Простейшим, вероятно, является sprintf.

int j; 
char const* s; 
sprintf(s, "%d", &j); 

Если вы не хотите использовать sprintf, вы можете тривиальное написать собственную процедуру:

int stringToInt (char const *s) 
{ 
    int i = 0; 
    while (*s != 0) 
    { 
     i *= 10; 
     i += (*s - '0'); 
     s++; 
    } 
    return i; 
} 

Обратите внимание, что это будет возвращать мусор, если s не содержит только десятичное целое число, выражаемые в основании 10.