Как объединить строки и текст вместе?

Я пытаюсь объединить две строки (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», он публикует какие-то странные значения, что мне не хватает?

, 👍-1

Обсуждение

сообщение1 + " " + сообщение2? вы знаете, что оператор + делает с int, @Juraj

Какой тип «полезной нагрузки»? Это динамически выделяемый массив символов?, @Filip Franik


2 ответа


2

Я бы не использовал класс String, а вместо этого использовал функции C для объединения строк (например, strcat, strncat).

Вы можете использовать функцию itoa для преобразования целого числа в строку, см.:

https://stackoverflow.com/questions/9655202/how -to-преобразовать-целое-в-строку-в-c

Или используйте функцию sprintf.

Все это стандартные функции C, которые дают вам полный контроль над размером используемого буфера. Удобно, потому что у Arduino Uno всего 2 КБ.

,

-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

,