даже если вы думаете, что вам не нужно знать порядок байтов, который кто-то может сделать. Не нужно объяснять, почему кому-то это не нужно, потому что вы можете не знать контекст. Вопрос не в том, «нужно ли мне знать порядок байтов», а в том, «это порядок байтов». Поэтому сконцентрируйтесь на теме, пожалуйста!
Сказав, что, вероятно, это лучшая практика, если мы не изобретаем колесо и просто полагаемся на макросы, которые 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;
}