incluso si crees que no necesitas saber la endianidad que alguien podría hacer. No es necesario explicar por qué alguien no lo necesita porque es posible que no conozca el contexto. La pregunta no es "necesito saber endianness", sino "es big o little endian". Así que concéntrate en el tema por favor!
Habiendo dicho que probablemente sea la mejor práctica si no reinventamos la rueda y simplemente confiamos en las macros que Apple proporciona para esto. La razón es porque han dedicado bastante tiempo a optimizar estas macros y asegurarse de que funcione bien con el simulador, Mac, iPhone y todo su sistema operativo y hardware.
Si investiga lo que sucede cuando invoca CFSwapInt16BigToHost
puede ver comentarios que sugieren que estas macros están produciendo probablemente el mejor código de máquina que puede obtener con la ayuda de la optimización del compilador:
OS_INLINE
uint16_t
_OSSwapInt16(
uint16_t data
)
{
/* Reduces to 'rev16' with clang */
return (uint16_t)(data << 8 | data >> 8);
}
OS_INLINE
uint32_t
_OSSwapInt32(
uint32_t data
)
{
#if defined(__llvm__)
data = __builtin_bswap32(data);
#else
/* This actually generates the best code */
data = (((data ^ (data >> 16 | (data << 16))) & 0xFF00FFFF) >> 8) ^ (data >> 8 | data << 24);
#endif
return data;
}