Как записать 4 8 битных переменных в одну 32 битную

Подскажите, можно ли записать это более компактно?

uint32_t val = 0;
val = byte4;
val=val<<8;
val |= byte3;
val=val<<8;
val |= byte2;
val=val<<8;
val |= byte1;

Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Схема Горнера:

uint32_t val = (((uint32_t)byte4 << 8 | byte3) << 8 | byte2) << 8 | byte1;

Сумма "степеней":

uint32_t val = (uint32_t)byte4 << 24 | (uint32_t)byte3 << 16 | (uint32_t)byte2 << 8 | byte1;

P.S. Добавлены приведения чтобы сделать все вычисления корректными в случае когда переменные byte* имеют тип меньший чем uint32_t, например uint8_t.

→ Ссылка