String()
Конструктор String() создаёт объект String из числа, символа, массива символов или другой строки, поддерживая выбор системы счисления.
Полная статья
Описание
Класс String в Arduino позволяет работать со строками как с полноценными объектами: сравнивать, соединять, искать подстроки и многое другое. Чтобы создать такой объект, используется конструктор String(), который умеет принимать значения разных типов.
Вот что можно передать конструктору:
- строковый литерал в двойных кавычках — массив символов
- одиночный символ в одинарных кавычках
- другой объект
String - целое число (
int,long,unsigned int,unsigned long) — будет преобразовано в строку с ASCII-представлением числа - то же целое число, но с указанием системы счисления
- число с плавающей точкой (
floatилиdouble) с заданным количеством знаков после запятой
Как числа превращаются в строки
Когда вы передаёте число, String() создаёт текстовое представление этого числа. По умолчанию используется десятичная система счисления:
String thisString = String(13);
Результат — строка «13». Если нужна другая система счисления, её указывают вторым аргументом. Например, шестнадцатеричное представление того же числа:
String thisString = String(13, HEX);
Результат — строка «d». А двоичное:
String thisString = String(13, BIN);
Результат — строка «1101».
Это особенно удобно, когда нужно вывести значение регистра или байта в читаемом виде через Serial.println().
Синтаксис
String(val)String(val, base)String(val, decimalPlaces)
Параметры
val— значение, которое преобразуется в строку. Допустимые типы:string,char,byte,int,long,unsigned int,unsigned long,float,double.base— необязательный параметр. Задаёт систему счисления для целочисленных значений:BIN(2),OCT(8),DEC(10),HEX(16) или любое целое число от 2 до 36.decimalPlaces— используется только когдаvalимеет типfloatилиdouble. Указывает, сколько знаков после запятой включить в строку.
Возвращает
Объект класса String.
Пример кода
Ниже показаны корректные варианты создания строк с помощью конструктора.
String stringOne = "Hello String"; // использование константной String
String stringOne = String('a'); // преобразование константного char в String
String stringTwo = String("This is a string"); // преобразование константной строки в объект String
String stringOne = String(stringTwo + " with more"); // конкатенация двух строк
String stringOne = String(13); // использование константного целого числа
String stringOne = String(analogRead(0), DEC); // использование int и основания системы счисления
String stringOne = String(45, HEX); // использование int и основания системы счисления (шестнадцатеричное)
String stringOne = String(255, BIN); // использование int и основания системы счисления (двоичное)
String stringOne = String(millis(), DEC); // использование long и основания системы счисления
String stringOne = String(5.698, 3); // использование float и количества знаков после запятой
Где применяется
- Вывод данных в Serial Monitor — когда нужно собрать строку из нескольких значений разного типа перед отправкой.
- Формирование сообщений для дисплея — LCD или OLED часто работают со строками, и конструктор позволяет быстро перевести показания датчика в текст.
- Отладка — преобразование числового значения в строку с нужной системой счисления помогает читать содержимое регистров и флагов.
- Протоколы передачи данных — когда нужно сформировать текстовую команду или ответ, например, для AT-команд или простого текстового протокола.
Практические замечания
- Объекты
Stringдинамически выделяют память в куче. На платах с малым объёмом RAM (например, Arduino Uno с 2 КБ) активное создание и удаление строк может приводить к фрагментации памяти и нестабильной работе скетча. В критичных проектах рассмотрите использование массивовcharи функций из<string.h>. - Параметр
decimalPlacesработает только дляfloatиdouble. Если передать его вместе с целым числом, компилятор выберет другую перегрузку конструктора и результат может быть неожиданным. - При преобразовании
floatучитывайте точность: типfloatна AVR-платах имеет около 6–7 значимых цифр, поэтому запрашивать 10 знаков после запятой бессмысленно — лишние разряды будут случайными. - Если результат
String()выглядит неожиданно (пустая строка или мусор), проверьте тип переданного аргумента — неявное приведение типов иногда выбирает не ту перегрузку конструктора. - Строки, созданные из строковых литералов, хранят копию данных в RAM. Для хранения константных строк во flash-памяти используйте макрос
F()совместно сSerial.print(), а неString().
Функции
- charAt()
- compareTo()
- concat()
- c_str()
- endsWith()
- equals()
- equalsIgnoreCase()
- getBytes()
- indexOf()
- lastIndexOf()
- length()
- remove()
- replace()
- reserve()
- setCharAt()
- startsWith()
- substring()
- toCharArray()
- toDouble()
- toInt()
- toFloat()
- toLowerCase()
- toUpperCase()
- trim()