isPrintable()
isPrintable() проверяет, является ли символ char печатаемым — буквой, цифрой, знаком препинания или пробелом, — возвращая true или false.
Полная статья
Описание
Функция isPrintable() определяет, относится ли символ к категории печатаемых. Печатаемыми считаются все символы, которые реально отображаются при выводе: буквы, цифры, знаки препинания и пробел. Непечатаемые символы — это управляющие коды вроде перевода строки (\n), возврата каретки (\r), табуляции (\t) и прочих служебных символов ASCII с кодами от 0 до 31, а также код 127 (DEL).
Функция возвращает true, если переданный символ можно распечатать.
Синтаксис
Используйте следующую функцию для проверки переменной типа char:
isPrintable(thisChar)
Параметры
thisChar: символ для проверки. Допустимый тип данных: char.
Возвращает
Функция возвращает true, если символ является печатаемым.
Пример кода
char myChar = ' '; // попробуйте с '\n' — непечатаемый символ
void setup() {
Serial.begin(9600);
if (isPrintable(myChar)) { // проверяет, является ли myChar печатаемым символом
Serial.println("The character is printable");
} else {
Serial.println("The character is not printable");
}
}
void loop() {
}
Где применяется
- Фильтрация входных данных с Serial — перед обработкой строки, полученной через
Serial.read(), удобно отбросить управляющие символы и оставить только те, что имеют визуальное представление. - Парсинг текстовых протоколов — при разборе ответов от модулей (GPS, GSM, Wi-Fi) нужно отличать полезный текст от служебных байтов.
- Вывод на дисплей — перед отправкой символа на LCD или OLED имеет смысл убедиться, что он вообще будет виден, иначе дисплей может вести себя непредсказуемо.
- Валидация пользовательского ввода — если устройство принимает команды с клавиатуры или через Bluetooth,
isPrintable()помогает быстро проверить, что пришли именно символы, а не мусор.
Практические замечания
- Пробел (код ASCII 32) считается печатаемым символом —
isPrintable()вернётtrueдля него. - Табуляция (
\t, код 9) и перевод строки (\n, код 10) — не печатаемые символы, функция вернётfalse. - Функция работает с кодами ASCII от 0 до 127. Поведение для значений выше 127 (расширенный ASCII) зависит от реализации и не гарантировано.
- Если вы читаете данные побайтово через
Serial.read(), сначала убедитесь, что результат не равен-1, и только потом приводите его кcharперед передачей вisPrintable(). - Функция не блокирует выполнение программы — это просто проверка значения символа, результат возвращается мгновенно.