Самый быстрый и предпочтительный способ объединения строк в Arduino:
- Используйте класс String.
- Если вам действительно нужна скорость и / или вы просто хотите избежать созданияновые строки в памяти с каждой операцией конкатенации, резервируют необходимую память заранее с помощью reserve () .
- Сначала установите для объекта пустую строку "".
- Затем добавьте необходимые символы или строки, вызвав concat () или оператор + =, , используя ровно одну операцию concat () или + = на строку кода .Это сделано для того, чтобы избежать создания временных объектов Strings.
- За счет предварительного выполнения Reserve () объект String будет эффективно действовать в качестве строкового буфера.
Применяя вышеизложенноерекомендации, операции конкатенации будут выполняться на месте .
Обратите внимание, что для функции import () должно быть выбрано наиболее подходящее значение для емкости буфера строки, то есть: максимальное количество символов, которое вам нужноперед String выполняет realloc (), не включая завершающий ноль символ '\ 0'.
Далее следуют три альтернативы:
1) Вот пример кода:
// Declaration, outside setup() and loop()
String line;
// Inside setup()
// Use the appropriate value for reserve(), depending on on your actual usage.
line.reserve(10);
// Inside loop()
line = "";
line += minutes;
line += ":";
line += seconds;
line += ":";
line += m;
Serial.println(line);
2) В качестве альтернативы вызову reserve () в setup (), вы можете объявить и инициализировать строку с помощью «шаблона» или фиктивной строки, которая имеет желаемую (максимальную) длину.
Здесьпример кода для этой альтернативы,
// Declaration, outside setup() and loop()
String line = "XXXX:YY:ZZ";
// No need to use reserve() inside setup()
// Inside loop()
line = "";
line += minutes;
line += ":";
line += seconds;
line += ":";
line += m;
Serial.println(line);
Первый подход позволяет вам использовать Reserve () с динамически рассчитанным значением максимальной длины, тогда как второй подход приводитв некоторой степени лучше читать код, когда у вас есть «шаблон» или известная фиксированная длина строки, которую вы будете составлять позже.
3) Если вам нужно только вывести данные в выходной поток(обычно последовательный), это самый быстрый и самый компактный код, без необходимости использования String или внешних библиотек,
// No need to declare a String outside setup() and loop()
// No need to use reserve() inside setup()
// Inside loop()
Serial.print(minutes);
Serial.print(":");
Serial.print(seconds);
Serial.print(":");
Serial.println(m);
Примечание: ответ Джона Y точно такой же, как мой последнийкусок кода, за исключением его «более простого» для чтения кода (при условии, что вы чувствуете себя комфортно с оператором <<, используемым в качестве C ++ потокового синтаксического сахара).В некоторых случаях, однако, использование библиотеки потоковой передачи приведет к созданию немного большего или более медленного кода. </p>