incluso si crees que no necesitas saber la resistencia que alguien podría tener. No es necesario explicar por qué alguien no lo necesita porque es posible que usted no conozca el contexto. La pregunta no es "¿necesito saber endianness" sino "es endian grande o pequeño". ¡Así que concéntrate en el tema por favor!
Habiendo dicho eso, probablemente sea la mejor práctica si no reinventamos la rueda y solo confiamos en las macros que Apple proporciona para esto. La razón es porque han dedicado bastante tiempo a optimizar estas macros y se han asegurado de que funcione bien con el simulador, así como en Mac, iPhone y todos sus sistemas operativos y hardware.
Si profundiza en 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;
}