mesmo que você ache que não precisa conhecer a perseverança que alguém pode fazer. Não é necessário explicar por que alguém não precisa, porque você pode não conhecer o contexto. A questão não é "eu preciso conhecer endianness", mas "é endian grande ou pequeno"? Então concentre-se no assunto, por favor!
Dito isto, provavelmente é a melhor prática se não reinventarmos a roda e confiarmos nas macros que a Apple fornece para isso. O motivo é que eles gastaram bastante tempo para otimizar essas macros e certificaram-se de que funcionassem bem com o simulador, bem como no Mac, iPhone e em todos os SOs e hardwares.
Se você descobrir o que está acontecendo quando você chamar, CFSwapInt16BigToHost
poderá ver comentários que sugerem que essas macros estão produzindo provavelmente o melhor código de máquina que você pode obter com a ajuda da otimização do 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;
}