Интерполяция строки

Arduino:
Интерполяция строки

Как:

В Arduino нет встроенной интерполяции строк, но можно получить похожий результат с помощью sprintf() или конкатенации строк и переменных.

char buffer[50]; // Убедитесь, что этого достаточно для хранения итоговой строки
int sensorValue = analogRead(A0);
sprintf(buffer, "Значение датчика: %d", sensorValue);
Serial.println(buffer);

Вывод:

Значение датчика: 402

Или с использованием конкатенации строк:

String message = "Значение датчика: " + String(sensorValue);
Serial.println(message);

Подробнее

C и C++ (основные языки для скетчей Arduino) традиционно не имеют интерполяции строк, как новые языки (например, Python или JavaScript). Вместо этого sprintf() была обычным способом составления строк с переменными. Это работает, но может быть немного громоздким и подверженным ошибкам из-за переполнения буфера, если его не управлять осторожно.

Конкатенация с использованием класса String более интуитивно понятна и безопаснее от ошибок памяти. Недостаток? Это может привести к фрагментации памяти, особенно в долгосрочных программах на устройствах с ограниченной памятью, таких как Arduino.

Альтернативой, найденной в некоторых новых или более специализированных библиотеках C++ (не стандартных для Arduino), является использование библиотек форматирования строк, которые предоставляют синтаксис, близкий к интерполяции, таких как fmtlib.

Что касается деталей реализации, когда вы используете конкатенацию с классом String, за кулисами Arduino создает новые объекты строк и управляет памятью за вас. sprintf(), с другой стороны, записывает отформатированный текст в буфер, который вы выделяете, давая вам больше контроля за счет необходимости вручную управлять памятью.

Смотрите также