Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Melaksanakan Fungsi htonll 64-Bit dalam C?
Mencari Fungsi htonl 64-Bit "Standard" dalam C
Dalam C , fungsi htonl digunakan untuk menukarkan 32- integer bit daripada susunan bait hos kepada susunan bait rangkaian. Walau bagaimanapun, untuk integer 64-bit, pada masa ini tiada fungsi htonll "standard" tersedia dalam bahasa.
Pelaksanaan Mudah Alih htonll
Untuk menangani keperluan ini, pengaturcara telah merangka pelaksanaan mudah alih htonll untuk mengendalikan penukaran pesanan bait integer 64-bit merentas platform yang berbeza, termasuk Windows, Linux dan AIX. Salah satu pelaksanaan tersebut ialah:
<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>
Pelaksanaan ini menggunakan fungsi htonl untuk penukaran 32-bit dan menggunakannya dua kali, sekali untuk setiap separuh 32-bit daripada integer 64-bit, sambil juga memastikan pertukaran bahagian adalah dalam susunan yang betul.
Menentukan Endianness
Memandangkan C tidak mempunyai cara mudah alih untuk menentukan endianness pada masa penyusunan, pelaksanaan di atas menyemaknya semasa runtime dengan memanggil htonl pada integer 1. Jika hasilnya sama dengan 1, sistem adalah little-endian, dan tiada pertukaran bait diperlukan. Jika tidak, ia adalah big-endian, dan pelaksanaan menukar bait.
Alternatif Menggunakan Arahan Pengkompil
Satu lagi pelaksanaan mudah alih menggunakan arahan pengkompil untuk membezakan antara big-endian dan seni bina little-endian:
<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>
Pelaksanaan ini mentakrifkan fungsi htonll dan ntohll berdasarkan arahan BIG_ENDIAN, yang disokong oleh kebanyakan penyusun dan sistem pengendalian.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Fungsi htonll 64-Bit dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!