Функции 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 |