Главная chevron_right Функции chevron_right Биты и байты chevron_right highByte()

highByte()

highByte() возвращает старший байт числа — удобно при передаче многобайтовых значений по I2C или SPI.

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

Описание

Когда нужно передать число по шине I2C, SPI или через последовательный порт, данные приходится разбивать на отдельные байты. highByte() решает ровно эту задачу: она возвращает старший (наиболее значимый) байт из переданного значения.

Для 16-битных типов (int, unsigned int) это буквально верхние 8 бит. Для типов шире 16 бит функция возвращает второй по счёту байт от младшего конца — не самый старший, а именно второй. Это важно учитывать, если вы работаете с long или unsigned long.

Синтаксис

highByte(x)

Параметры

x — число, из которого нужно извлечь байт. Подходит любой целочисленный тип данных.

Возвращает

Функция возвращает значение типа byte — старший байт исходного числа.

Пример кода

unsigned int x = 0xABCD; // Шестнадцатеричное 43981

void setup() {
  Serial.begin(9600);
  
  byte high = highByte(x);  // Извлекает 0xAB (171 в десятичной)

  Serial.print("The high byte is: ");
  Serial.println(high, HEX);  // Выводит "AB"
 
}

void loop() {
}

Как работает функция внутри

Под капотом highByte() — простая битовая операция. Вот что она делает:

#define highByte(w) ((uint8_t) (((w) >> 8) & 0xFF))

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

  • Протоколы I2C и SPI: многие устройства принимают команды и адреса в виде двух байт — старшего и младшего. highByte() и lowByte() вместе покрывают эту задачу.
  • Последовательная передача данных: при отправке int через Serial.write() нужно разбить число на два байта и отправить их по очереди.
  • Ручная упаковка данных: если вы формируете буфер для записи в EEPROM или передачи по сети, разбивка числа на байты — стандартная операция.
  • Отладка: вывод старшего и младшего байта по отдельности помогает убедиться, что число правильно передаётся или принимается.

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

  • Для 16-битных переменных (int, unsigned int) highByte() возвращает биты 15–8, то есть именно старший байт.
  • Для типов шире 16 бит, например long (32 бита), функция возвращает второй байт, а не четвёртый. Если нужен самый старший байт 32-битного числа, используйте сдвиг: (x >> 24) & 0xFF.
  • highByte() и lowByte() удобно использовать в паре: highByte(x) даёт старший байт, lowByte(x) — младший.
  • Результат всегда имеет тип byte (0–255), независимо от типа входного аргумента.
  • Функция не изменяет исходную переменную — она только читает её значение.

Полезные материалы