Конвертировать Little Endian в Big Endian

Я просто хочу спросить, правильный ли мой метод для преобразования из порядкового номера в обратный, чтобы убедиться, что я понимаю разницу.

У меня есть число, которое хранится в младшем порядке, вот двоичное и шестнадцатеричное представление числа:

‭0001 0010 0011 0100 0101 0110 0111 1000‬

‭12345678‬

В формате с прямым порядком байтов я считаю, что байты должны быть заменены следующим образом:

1000 0111 0110 0101 0100 0011 0010 0001

‭87654321

Это верно?

Кроме того, код ниже пытается сделать это, но не удается. Что-то явно не так или я могу что-то оптимизировать? Если код не подходит для этого преобразования, не могли бы вы объяснить, почему и показать лучший способ выполнить то же преобразование?

uint32_t num = 0x12345678;
uint32_t b0,b1,b2,b3,b4,b5,b6,b7;
uint32_t res = 0;

b0 = (num & 0xf) << 28;
b1 = (num & 0xf0) << 24;
b2 = (num & 0xf00) << 20;
b3 = (num & 0xf000) << 16;
b4 = (num & 0xf0000) << 12;
b5 = (num & 0xf00000) << 8;
b6 = (num & 0xf000000) << 4;
b7 = (num & 0xf0000000) << 4;

res = b0 + b1 + b2 + b3 + b4 + b5 + b6 + b7;

printf("%d\n", res);

Ответы на вопрос(11)

Ваш ответ на вопрос