Функции highByte() и lowByte() (Arduino)

Функции highByte() и lowByte() позволяют извлекать старший и младший байт из числа int.

Если мы объявим переменную как int, ее значение будет храниться в двух байтах.

Функция lowByte() даст нам значение младшего байта, тогда как значение highByte() — старшего байта.

Пример:

void setup(){
  Serial.begin(9600);

  long x = 10000; // если число > 255 разбиваем на 2 байта (макс. 65536)
  byte hi = highByte(x); // старший байт
  byte low = lowByte(x); // младший байт

  Serial.print(hi);
  Serial.print(" ");
  Serial.print(low);

  int y = (hi<<8)+low; // собираем число из 2-х байтов
  // y = hi *256 + low 

  Serial.print(" ");
  Serial.print(y);
} 

void loop(){}

Если необходимо разложить на байты большое число, например unsigned long то можно воспользоваться следующим примером:

void setup(){
  Serial.begin(9600);

  unsigned long x = 100000000; // разбиваем число на 4 байта (макс. 4,294,967,295)
  uint8_t x0 = ((x >> 0) & 0xFF);  // 00 00 00 FF
  uint16_t x1 = ((x >> 8) & 0xFF); // 00 00 FF 00
  uint32_t x2 = ((x >> 16) & 0xFF);// 00 FF 00 00
  uint32_t x3 = ((x >> 24) & 0xFF);// FF 00 00 00

  Serial.print(x0);
  Serial.print(" ");
  Serial.print(x1);
  Serial.print(" ");
  Serial.print(x2);
  Serial.print(" ");
  Serial.print(x3);

unsigned long y = (x3 << 24) + (x2 << 16) + (x1 << 8) + x0; // собираем число из 4-х байтов
  
    Serial.print(" ");
    Serial.print(y);
} 

void loop(){
}

int8_t char  от -128 до 127
uint8_t byte, unsigned char   от 0 до 255
int16_t int от -32768 до 32767
uint16_t unsigned int, word  от 0 до 65535
int32_t long от  -2147483648 до 2147483647
uint32_t unsigned long от 0 до 4294967295

 

Добавить комментарий

Войти с помощью: