isControl()
isControl() проверяет, является ли символ управляющим (коды 0–31 и 127): возвращает true для '\n', '\r', '\t' и других непечатаемых символов ASCII.
Полная статья
Описание
Функция isControl() проверяет, относится ли переданный символ к категории управляющих символов ASCII. Управляющие символы — это непечатаемые символы с кодами от 0 до 31, а также символ с кодом 127 (DEL). К ним относятся, например, перевод строки ('\n', код 10), возврат каретки ('\r', код 13), горизонтальная табуляция ('\t', код 9), нулевой символ ('\0', код 0) и другие служебные коды.
Если символ является управляющим, функция возвращает true.
Синтаксис
isControl(thisChar)
Параметры
thisChar: символ, который нужно проверить. Тип данных: char.
Возвращает
Функция возвращает true, если переданный символ является управляющим. Если символ — обычный печатаемый знак (буква, цифра, знак препинания и т. д.), функция вернёт false.
Пример кода
char myChar = '\n'; // попробуйте 'n' как неуправляющий символ
void setup() {
Serial.begin(9600);
if (isControl(myChar)) { // проверяет, является ли myChar управляющим символом
Serial.println("The character is a control character");
}
else {
Serial.println("The character is not a control character");
}
}
void loop() {
}
Где применяется
- Разбор входящих данных через Serial — при чтении строк посимвольно удобно отсеивать управляющие символы (
'\n','\r') перед тем, как обрабатывать полезное содержимое. - Валидация пользовательского ввода — если устройство принимает команды в текстовом виде,
isControl()помогает быстро отфильтровать «мусорные» байты. - Работа с протоколами — некоторые протоколы используют управляющие символы как маркеры начала или конца пакета; функция позволяет легко их обнаружить.
Практические замечания
- Функция работает корректно только с символами в диапазоне ASCII (0–127). Передача значений выше 127 может дать непредсказуемый результат — поведение зависит от реализации стандартной библиотеки C.
- Пробел (
' ', код 32) не является управляющим символом —isControl()вернёт для негоfalse. - Нулевой символ
'\0'(код 0) считается управляющим, поэтому функция вернётtrueи для него. - Если вы читаете данные из
Serialи хотите накапливать только «видимые» символы, удобно использоватьisControl()в паре сisPrint()илиisGraph(). - Функция не блокирует выполнение программы и не имеет побочных эффектов — это простая проверка значения символа.