Объединение символов из массива символов в одно целое число

Я пытался создать последовательный контроллер двигателя из ATtiny 85. У меня он настроен как подчиненный. Он получает символы от мастера по одному байту за раз и загружает их в массив символов для анализа.

Проблема в том, что я не могу найти способ объединить их вместо добавления значений.

rxChrData = TinyWireS.receive();
rxString[rxIndex] = char(rxChrData);
rxIndex++;
if (rxChrData == ':'){
//rxString 2-3 each holds the value 9.
//The lines below print "27" on the serial line.
n = int(rxString[2]+rxString[3]+rxString[4]);
Serial.println(n);
rxIndex = 0;
}

Значение n равно 27, и мне нужно, чтобы оно было 999.

Я попытался преобразовать его в строку, объединить, а затем обратно в целое число. Неудачно. Я также попытался несколько других неумелых обходных путей без удачи.

1

Решение

Как это

n = 100*rxString[2]+10*rxString[3]+rxString[4];

или, может быть, это

n = rxString[2]+10*rxString[3]+100*rxString[4];
3

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

Другой вариант: используйте strtol ():

#include <cstdlib>

n = strtol( rxString+2, NULL, 10 );
0

для более общего подхода …

if (rxChardata == ':') {
// Consume the ':'
rxCharData = TinyWireS.receive();
int n = 0;
while (isdigit(rxCharData)) {
n = n * 10 + (rxCharData - '0');
rcCharData = TinyWireS.receive();
}
Serial.println(n);
}

Но вам нужно будет проверить, что происходит, когда вы вызываете TinyWireS.receive (), и больше нет цифр … возвращает ли она ‘\ 0’? В этом случае выше будет работать.

0