Сочетание двух uint8_t как uint16_t У меня есть следующие данные uint8_t d1=0x01; uint8_t d2=0x02; Я хочу объединить их как uint16_t как uint16_t wd = 0x0201; Как я могу это сделать? Ответ 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).
Ответ 1 Вы можете использовать побитовые операторы: uint16_t wd = ((uint16_t)d2 << 8) | d1; Потому что: (0x0002 << 8) | 0x01 = 0x0200 | 0x0001 = 0x0201
Ответ 3 Это довольно просто. Вам не нужны никакие броски, вам не нужны временные переменные, вам не нужна черная магия. uint8_t d1=0x01; uint8_t d2=0x02; uint16_t wd = (d2 << 8) | d1; Это всегда корректное поведение, поскольку d2 всегда является положительным значением и никогда не переполняется, пока d2 <= INT8_MAX. (INT8_MAX находится в stdint.h).