Здравствуйте. Уже несколько дней бьюсь с возникшей проблемой.
Имеется программа, которая по serial получает число из 4 байт в формате “cb f4 39 26” и записывает их в char массив.
Каким образом можно из этого массива собрать uint32_t число и положить в соответствующую переменную?
Моих знаний хватило только на следующий код, но к сожалению и он не совсем работоспособен, так как к переменной ‘a’ во время преобразования приклеиваются лишние символы ‘ff’.
char rcvd[4];
int i = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
while (Serial.available()) {
char inChar = (char)Serial.read();
rcvd[i] = inChar;
i++;
}
i = 0;
Serial.println(rcvd);
String a = "";
a += String(rcvd[0], HEX);
a += String(rcvd[1], HEX);
a += String(rcvd[2], HEX);
a += String(rcvd[3], HEX);
Serial.print("a = ");
Serial.println(a);
char text_buff[] = "FFFFFFFF";
a.toCharArray(text_buff, 8);
Serial.print("text_buff = ");
Serial.println(text_buff);
uint32_t SUM = 0;
sscanf(text_buff, "%lx", &SUM);
Serial.print("SUM = ");
Serial.println(SUM);
delay(3000);
}
Каким образом можно более корректно произвести такое преобразование?
У вас эти 4 байта - и есть готовое значение uint32 в бинарном виде. Не надо ничего преобразовывать, всего лишь байты скопировать в переменную соответствующего типа
Можно не выпендриваться, а показать нормальный символьный вывод? Просто копипасту текста из монитора порта? Только полную, всё, что печатается.
Кроме того, если Вы хотите нормально печатать, так печатайте правильно. В строке №15 Вы печатать строку у которой в конце нет ‘\0’'. Что Вы надеетесь при этом увидеть?
И ещё что конкретно Вы передаёте через последовательный порт? Кто передаёт? Руками из монитора порта набираете? Или программа какая передаёт? Можно ли посмотреть на ту программу?