Я предпочитаю твой первый вариант второму.Или вы можете использовать параллельную обработку, имея четыре локальные переменные, которые принимают отдельные байты, смещенные на правильную величину.Затем в последней строке вы return b0shifted | b1shifted | b2shifted | b3shifted
.
В любом случае, все зависит от вашего компилятора.Ваш второй вариант содержит больше операций загрузки / сохранения, поэтому в первом варианте меньше абстрактных операций.
Что касается читаемости, понятности и ясности, ваш первый вариант великолепен.Он также работает на любой странной платформе, которую вы используете (endianess, выравнивание), при условии, что CHAR_BIT == 8
.