Главная chevron_right Функции chevron_right Связь chevron_right Stream.parseInt()

Stream.parseInt()

parseInt() читает поток посимвольно и возвращает первое найденное целое число как long; режим lookahead и параметр ignore позволяют гибко управлять тем, какие символы пропускать до числа.

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

Описание

parseInt() сканирует поток данных и возвращает первое найденное целое число типа long. Функция читает символы последовательно и останавливается, как только встречает символ, который не может быть частью числа (не цифра и не ведущий знак минус), или когда истекает таймаут ожидания новых данных — подробнее о таймауте см. Stream.setTimeout().

Функция принадлежит классу Stream и доступна во всех классах, которые его наследуют, в том числе Wire и Serial. Подробнее об общем поведении класса — на странице Stream.

Синтаксис

  • stream.parseInt()
  • stream.parseInt(lookahead)
  • stream.parseInt(lookahead, ignore)

Параметры

  • lookahead: определяет, как функция обрабатывает символы перед числом. Тип данных: LookaheadMode. Допустимые значения:
  • SKIP_ALL: всё, что не является цифрой или знаком минус, пропускается. Это режим по умолчанию — удобен, когда данные могут содержать произвольный «мусор» до числа.
  • SKIP_NONE: функция ничего не пропускает. Если первый символ в буфере не является началом допустимого числа, поток не изменяется и функция сразу возвращает 0.
  • SKIP_WHITESPACE: пропускаются только пробельные символы — пробел, табуляция (\t), перевод строки (\n) и возврат каретки (\r). Полезно при разборе аккуратно отформатированных данных.
  • ignore: символ, который нужно игнорировать во время поиска числа — например, разделитель тысяч (','). Тип данных: char.

Возвращает

Первое найденное целое число или 0, если допустимое число не обнаружено. Тип данных: long.

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

  • Ввод команд через Serial Monitor: пользователь набирает число, скетч читает его через Serial.parseInt() и использует как параметр — например, яркость светодиода или угол сервопривода.
  • Разбор строк с несколькими числами: если устройство отправляет данные вида "100,200,300", можно вызывать parseInt() несколько раз подряд, указав ',' как символ ignore.
  • Чтение данных от датчиков по I²C через Wire: когда ведомое устройство передаёт числа в текстовом формате, parseInt() позволяет извлечь их напрямую из входного потока.
  • Парсинг ответов GSM/GPS-модулей: модули часто возвращают строки с числовыми полями, разделёнными запятыми или другими символами.

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

  • Блокирующее поведение: если в буфере нет данных, функция ждёт их появления вплоть до истечения таймаута. По умолчанию таймаут составляет 1 секунду. Это может замедлить выполнение скетча, если вызывать parseInt() без предварительной проверки available().
  • Результат при отсутствии числа: когда допустимое число не найдено, функция возвращает 0. Это не признак ошибки чтения — просто в потоке не оказалось подходящих данных. Учитывайте это при логике обработки результата.
  • Режим SKIP_NONE и позиция в потоке: при использовании этого режима, если первый символ не является цифрой или знаком минус, поток остаётся нетронутым — следующий вызов увидит ту же позицию. Это важно при пошаговом разборе протокола.
  • Параметр ignore не работает без lookahead: чтобы передать символ-разделитель, обязательно нужно указать и режим lookahead. Используйте, например, stream.parseInt(SKIP_WHITESPACE, ',').
  • Диапазон значений: результат имеет тип long, то есть на большинстве плат Arduino это 32-битное знаковое целое (от −2 147 483 648 до 2 147 483 647). Числа за пределами диапазона будут прочитаны некорректно.