Penukaran Integer 64-Bit dalam C : Di luar ntohl()
Fungsi htonl() , seperti yang dicadangkan oleh dokumentasinya, adalah terhad kepada penukaran integer 32-bit. Walau bagaimanapun, dalam situasi di mana anda memerlukan penukaran 64-bit, terdapat beberapa pilihan yang tersedia.
Fungsi Perpustakaan Standard
Untuk Linux (glibc >= 2.9) dan FreeBSD , fungsi htobe64() boleh digunakan untuk menukar integer 64-bit daripada endian besar kepada endian kecil. Fungsi ini adalah sebahagian daripada pustaka C standard.
Pendekatan Berasaskan Kesatuan
Sebagai alternatif, anda boleh menggunakan kesatuan untuk menukar antara integer 64-bit dan 8-bait susunan aksara. Pendekatan ini melibatkan pertukaran bait secara manual untuk platform endian besar.
Makro Prapemproses
Untuk menyembunyikan perbezaan khusus platform dan menyediakan pendekatan bersatu, anda boleh menggunakan yang berikut kod prapemproses:
<code class="cpp">#if defined(__linux__) # include <endian.h> #elif defined(__FreeBSD__) || defined(__NetBSD__) # include <sys/endian.h> #elif defined(__OpenBSD__) # include <sys/types.h> # define be16toh(x) betoh16(x) # define be32toh(x) betoh32(x) # define be64toh(x) betoh64(x) #endif</code>
Kod ini menyediakan makro gaya Linux/FreeBSD pada Linux, OpenBSD, FreeBSD dan NetBSD.
Contoh Penggunaan
Untuk menunjukkan penggunaan pendekatan yang disyorkan, pertimbangkan kod berikut:
<code class="cpp">#include <stdint.h> // For 'uint64_t' int main() { uint64_t host_int = 123; uint64_t big_endian; big_endian = htobe64(host_int); host_int = be64toh(big_endian); return 0; }</code>
Kod ini menukar integer 64-bit, host_int, daripada endian kecil kepada endian besar dan belakang, dengan berkesan mengekalkan nilainya.
Atas ialah kandungan terperinci Bagaimana untuk Menukar Integer 64-Bit dalam C Beyond ntohl()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!