anche se pensi di non aver bisogno di sapere l'endianità che qualcuno potrebbe fare. Non c'è bisogno di spiegare perché qualcuno non ne ha bisogno perché potresti non conoscere il contesto. La domanda non è "ho bisogno di sapere l'endianità", ma piuttosto "è big o little endian". Quindi concentrati sull'argomento per favore!
Detto questo probabilmente è la migliore pratica se non re-inventiamo la ruota e basiamo solo sulle macro che Apple fornisce per questo. Il motivo è perché hanno speso un bel po 'di tempo per ottimizzare questi macro e hanno fatto in modo che funzionasse bene con il simulatore così come su Mac, iPhone e tutti i loro sistemi operativi e hardware.
Se osservi cosa succede quando invochi CFSwapInt16BigToHost
potresti vedere dei commenti che suggeriscono che queste macro producono probabilmente il miglior codice macchina che puoi ottenere con l'aiuto dell'ottimizzazione del compilatore:
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;
}