Pelanjutan ntohl() untuk Nilai 64-bit
Fungsi C ntohl() biasanya digunakan untuk menukar nilai 32-bit daripada rangkaian perintah bait untuk menghoskan pesanan bait. Walau bagaimanapun, dalam senario tertentu, seseorang mungkin memerlukan operasi yang serupa untuk nilai 64-bit.
Penyelesaian
Halaman manual untuk htonl() menunjukkan hadnya kepada 32- nilai bit, kerana panjang yang tidak ditandatangani pada platform tertentu adalah bersaiz 32 bit. Untuk menangani keperluan untuk penukaran 64-bit, beberapa pendekatan boleh diterokai:
Perpustakaan Standard:
Cadangan Pelaksanaan:
Sihir 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>
Contoh Penggunaan:
Menggunakan sihir prapemproses, penukaran boleh dilakukan menggunakan coretan kod berikut:
<code class="cpp"> #include <stdint.h> uint64_t host_int = 123; uint64_t big_endian; big_endian = htobe64( host_int ); host_int = be64toh( big_endian );</code>
Pendekatan ini menyediakan antara muka seperti perpustakaan C standard yang serasi merentas berbilang platform.
Atas ialah kandungan terperinci Bagaimana untuk Menukar Nilai 64-bit Antara Rangkaian dan Pesanan Byte Hos dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!