Soalan:
Bolehkah kita mendapatkan fungsi standard seperti htonl yang berfungsi dengan integer 64-bit dalam C , membenarkan penukaran kepada susunan bait rangkaian?
Jawapan:
Walaupun tiada fungsi yang ditakrifkan secara eksplisit seperti htonll dalam C perpustakaan standard, adalah mungkin untuk mencipta pelaksanaan mudah alih. Berikut ialah dua pendekatan:
Menggunakan Pengesanan Endianness Dinamik:
<code class="cpp">#define htonll(x) ((1 == htonl(1)) ? (x) : ((uint64_t)htonl((x) & 0xFFFFFFFF) << 32) | htonl((x) >> 32)) #define ntohll(x) ((1 == ntohl(1)) ? (x) : ((uint64_t)ntohl((x) & 0xFFFFFFFF) << 32) | ntohl((x) >> 32))</code>
Menggunakan Makro Prapemproses :
<code class="cpp">#if __BIG_ENDIAN__ # define htonll(x) (x) # define ntohll(x) (x) #else # define htonll(x) (((uint64_t)htonl((x) & 0xFFFFFFFF) << 32) | htonl((x) >> 32)) # define ntohll(x) (((uint64_t)ntohl((x) & 0xFFFFFFFF) << 32) | ntohl((x) >> 32)) #endif</code>
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Fungsi Pesanan Bait Integer 64-Bit Mudah Alih dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!