Convertir Little Endian a Big Endian

Solo quiero preguntar si mi método es correcto para convertir de little endian a big endian, solo para asegurarme de que entiendo la diferencia.

Tengo un número que está almacenado en little-endian, aquí están las representaciones binarias y hexadecimales del número:

‭0001 0010 0011 0100 0101 0110 0111 1000‬

‭12345678‬

En formato big-endian, creo que los bytes deberían intercambiarse, de esta manera:

1000 0111 0110 0101 0100 0011 0010 0001

‭87654321

¿Es esto correcto?

Además, el código siguiente intenta hacer esto pero falla. ¿Hay algo obviamente mal o puedo optimizar algo? Si el código es malo para esta conversión, ¿puede explicar por qué y mostrar un método mejor para realizar la misma conversión?

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);

Respuestas a la pregunta(11)

Su respuesta a la pregunta