Я просто хочу спросить, подходит ли мой метод для преобразования от маленького endian к большому endian, просто чтобы убедиться, что я понимаю разницу.
У меня есть число, которое хранится в little-endian, вот двоичные и шестнадцатеричные представления числа:
0001 0010 0011 0100 0101 0110 0111 1000
12345678
В формате big-endian я считаю, что байты должны быть заменены, например:
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);