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().

Функции

Операторы

Полезные материалы