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()
, с другой стороны, записывает отформатированный текст в буфер, который вы выделяете, давая вам больше контроля за счет необходимости вручную управлять памятью.
Смотрите также
- Справочник по классу
String
Arduino: https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/ - Справочник по функции
sprintf()
: http://www.cplusplus.com/reference/cstdio/sprintf/ - Оптимизация памяти Arduino: https://www.arduino.cc/en/Tutorial/Foundations/Memory
- fmtlib, современная библиотека форматирования строк: https://fmt.dev/latest/index.html