getBytes()

Метод getBytes() копирует символы объекта String в массив byte — удобно для передачи данных через SPI, запись в EEPROM или отправки через Serial.write().

Полная статья

Описание

Метод getBytes() позволяет получить содержимое строки типа String в виде сырых байт — то есть скопировать символы строки в обычный массив типа byte. Это удобно, когда нужно передать строку побайтово: например, отправить данные по шине SPI, записать в EEPROM или сформировать пакет для последовательного порта.

Важно понимать: метод копирует не более len - 1 символов и всегда добавляет в конец нулевой байт (\0), чтобы буфер оставался корректной C-строкой. Если строка длиннее len - 1, содержимое будет обрезано.

Синтаксис

myString.getBytes(buf, len)

Параметры

  • myString: объект типа String, из которого копируются символы.
  • buf: массив типа byte, в который будут записаны символы строки. Массив должен быть объявлен заранее и иметь достаточный размер.
  • len: размер буфера buf в байтах. Тип данных: unsigned int. Метод скопирует не более len - 1 символов и добавит завершающий нуль.

Возвращает

Ничего.

Где применяется

  • Передача строковых данных по SPI или I2C, где нужен доступ к отдельным байтам.
  • Запись строки в EEPROM через функцию EEPROM.write(), которая работает с байтами.
  • Формирование бинарного пакета для отправки через Serial.write().
  • Обработка строки посимвольно в алгоритмах, которые не работают с типом String напрямую.

Практические замечания

  • Всегда объявляйте буфер с размером не меньше myString.length() + 1, иначе строка будет обрезана.
  • Метод всегда записывает завершающий нулевой байт, поэтому полезная ёмкость буфера — len - 1 символов.
  • Если передать len = 0, ничего не будет скопировано, и буфер останется нетронутым.
  • Не путайте getBytes() с toCharArray(): оба метода делают похожее, но toCharArray() работает с массивом char, а getBytes() — с массивом byte. Для большинства ASCII-строк результат будет одинаковым.
  • После вызова getBytes() содержимое буфера можно передавать в функции, ожидающие uint8_t* или byte*, без дополнительного приведения типов.