Подтвердить что ты не робот

Сочетание двух uint8_t как uint16_t

У меня есть следующие данные

uint8_t d1=0x01; 
uint8_t d2=0x02; 

Я хочу объединить их как uint16_t как

uint16_t wd = 0x0201;

Как я могу это сделать?

4b9b3361

Ответ 1

Вы можете использовать побитовые операторы:

uint16_t wd = ((uint16_t)d2 << 8) | d1;

Потому что:

 (0x0002 << 8) | 0x01 = 0x0200 | 0x0001 = 0x0201

Ответ 2

Самый простой способ:

256U*d2+d1

Ответ 3

Это довольно просто. Вам не нужны никакие броски, вам не нужны временные переменные, вам не нужна черная магия.

uint8_t d1=0x01; 
uint8_t d2=0x02; 
uint16_t wd = (d2 << 8) | d1;

Это всегда корректное поведение, поскольку d2 всегда является положительным значением и никогда не переполняется, пока d2 <= INT8_MAX.

(INT8_MAX находится в stdint.h).