Penukaran Integer 64-Bit daripada Big Endian kepada Little Endian dalam C
Fungsi standard C ntohl() menukarkan integer 32-bit daripada susunan bait rangkaian (big-endian) untuk menjadi tuan rumah pesanan bait (little-endian) dan sebaliknya. Walau bagaimanapun, terdapat keperluan untuk menukar integer 64-bit (khususnya nilai panjang panjang yang tidak ditandatangani) pada sesetengah platform.
Malangnya, piawaian C tidak menyediakan fungsi khusus untuk penukaran integer 64-bit. Walau bagaimanapun, pelaksanaan khusus platform wujud.
Penyelesaian Khusus Platform
Contoh Kod
Kod berikut boleh digunakan untuk menukar integer 64-bit pada pelbagai platform:
<code class="cpp">#include <stdint.h> // For 'uint64_t' #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 int main() { uint64_t host_int = 123; uint64_t big_endian; // Convert to big-endian big_endian = htobe64(host_int); // Convert back to host byte order host_int = be64toh(big_endian); return 0; }</code>
Contoh ini akan melaksanakan penukaran integer 64-bit pada Linux, FreeBSD dan OpenBSD menggunakan fungsi khusus platform yang sesuai.
Atas ialah kandungan terperinci Bagaimana untuk Menukar Integer 64-Bit daripada Big Endian kepada Little Endian dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!