bahkan jika Anda berpikir Anda tidak perlu mengetahui endianness yang mungkin dilakukan seseorang. Tidak perlu menjelaskan mengapa seseorang tidak membutuhkannya karena Anda mungkin tidak tahu konteksnya. Pertanyaannya bukan "apakah saya perlu tahu endianness" melainkan "apakah endian besar atau kecil". Jadi, berkonsentrasilah pada subjek!
Setelah mengatakan bahwa mungkin itu adalah praktik terbaik jika kita tidak menemukan kembali roda dan hanya mengandalkan makro yang disediakan Apple untuk ini. Alasannya adalah karena mereka telah menghabiskan cukup banyak waktu untuk mengoptimalkan makro ini dan memastikan bahwa itu berfungsi baik dengan simulator maupun pada Mac, iPhone dan semua OS dan perangkat keras mereka.
Jika Anda menggali apa yang terjadi ketika Anda memohon CFSwapInt16BigToHost
Anda mungkin dapat melihat komentar yang menyarankan makro ini memproduksi mungkin kode mesin terbaik yang bisa Anda dapatkan dengan bantuan optimisasi kompiler:
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;
}