Как объединить строки и текст вместе?
Я пытаюсь объединить две строки (strings/int) вместе с текстом в приведенном ниже коде:
int foo = String((char*)payload).indexOf(' ');
int message1;
int message2;
message1 = String((char*)payload).substring(0, foo).toInt();
Serial.print(message1); // Возвращает 1
message2 = String((char*)payload).substring(foo + 1, length).toInt();
Serial.print(message2); // Возвращает 0
client.publish(msg, String(message1 + " " + message2).c_str(), true);
// опубликованное значение: 1 0
Вместо того, чтобы публиковать «1 0», он публикует какие-то странные значения, что мне не хватает?
@guestposner, 👍-1
Обсуждение2 ответа
Я бы не использовал класс String, а вместо этого использовал функции C для объединения строк (например, strcat, strncat).
Вы можете использовать функцию itoa для преобразования целого числа в строку, см.:
https://stackoverflow.com/questions/9655202/how -to-преобразовать-целое-в-строку-в-c
Или используйте функцию sprintf.
Все это стандартные функции C, которые дают вам полный контроль над размером используемого буфера. Удобно, потому что у Arduino Uno всего 2 КБ.
Потратив немало времени на поиск простой и понятной формулы, я обнаружил, что уже сталкивался с этим вопросом в прошлом, и сохранил решение в другом скетче (прикрепив его сюда для следующего раза!).
Ниже было решение, которое время от времени работало идеально:
int foo = String((char*)payload).indexOf(' ');
int message1;
int message2;
message1 = String((char*)payload).substring(0, foo).toInt();
Serial.print(message1); // Возвращает 1
message2 = String((char*)payload).substring(foo + 1, length).toInt();
Serial.print(message2); // Возвращает 0
char combinedval[40];
strcpy(combinedval, String(message1).c_str());
strcat(combinedval, " ");
strcat(combinedval, String(message2).c_str());
client.publish(msg, combinedval, true);
// опубликованное значение: 1 0
- Ардуино - Извлечение нескольких строк из последовательного чтения
- Печать string and integer LCD
- Очень простая операция Arduino Uno Serial.readString()
- Как преобразовать строку в массив байтов
- Почему мои часы реального времени показывают неверное время с моего ПК?
- Программа arduino выдаёт ошибку expected //primary-expression before ')' token error: //expected ';' before '}' token E
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Как отправить строку с подчиненного устройства Arduino с помощью SPI?
сообщение1 + " " + сообщение2
? вы знаете, что оператор + делает с int, @JurajКакой тип «полезной нагрузки»? Это динамически выделяемый массив символов?, @Filip Franik