навіть якщо ви думаєте, що вам не потрібно знати цілеспрямованість, яку хтось може зробити. Не потрібно пояснювати, чому комусь це не потрібно, оскільки ви, можливо, не знаєте контексту. Питання не в тому, "чи потрібно мені знати ендіанство", а в тому, "чи це великий чи маленький ендіанець"? Тож зосередьтесь на темі, будь ласка!
Сказавши, що, мабуть, це найкраща практика, якщо ми не винаходимо колесо і просто покладаємось на макроси, які Apple забезпечує для цього. Причина полягає в тому, що вони витратили досить багато часу на оптимізацію цих макросів і переконалися, що вони добре працюють з тренажером, а також на Mac, iPhone та всіх їх ОС та обладнання.
Якщо ви CFSwapInt16BigToHost
переконайтеся, що відбувається під час виклику, ви можете побачити коментарі, які підказують, що ці макроси створюють, мабуть, найкращий машинний код, який ви можете отримати за допомогою оптимізації компілятора:
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;
}