unsigned char
unsigned char — однобайтовый беззнаковый тип из C/C++ для чисел 0–255, полный аналог byte; в Arduino-коде предпочтительнее использовать byte.
Полная статья
Описание
unsigned char — стандартный тип языка C/C++, занимающий ровно 1 байт памяти и хранящий целые числа от 0 до 255. В мире Arduino у него есть более удобный псевдоним — byte, который делает то же самое и считается предпочтительным для единообразия кода на Arduino. Если вы пишете скетч с нуля, используйте byte; unsigned char пригодится, когда вы портируете код из чистого C/C++ или работаете с библиотеками, написанными в этом стиле.
Тип не хранит отрицательных значений. Если попытаться записать число больше 255, оно «переполнится» и обернётся с начала диапазона (256 превратится в 0, 257 — в 1 и так далее).
Синтаксис
unsigned char var = val;
Параметры
var: имя переменной — любой допустимый идентификатор C++val: начальное значение в диапазоне 0–255; если значение выходит за пределы, компилятор может выдать предупреждение, а результат окажется непредсказуемым
Пример кода
unsigned char myChar = 240;
Где применяется
- Работа с байтовыми буферами — хранение отдельных байт при чтении из Serial, SPI или I2C.
- Яркость и цвет — значения ШИМ (
analogWrite) и компоненты RGB лежат именно в диапазоне 0–255. - Экономия памяти — когда массив хранит небольшие неотрицательные числа и каждый байт оперативной памяти на счету.
- Совместимость с C-кодом — портирование библиотек и примеров, написанных на чистом C.
Практические замечания
- На платах Arduino
unsigned charиbyteзанимают одинаковый объём памяти и ведут себя идентично — выбор между ними чисто стилистический. - Будьте внимательны при арифметике: результат выражения вроде
(unsigned char)(200 + 100)переполнится и даст 44, а не 300. - Если переменная участвует в сравнении с отрицательным числом типа
int, компилятор приведёт типы автоматически, но результат может удивить — лучше явно контролировать диапазон значений. - При выводе в
Serial.print()значение будет напечатано как число, а не как символ. Чтобы вывести символ, используйтеSerial.write()или приведение кchar.