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). Числа за пределами диапазона будут прочитаны некорректно.