Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menukar Integer 64-Bit dalam C Beyond ntohl()?

Bagaimana untuk Menukar Integer 64-Bit dalam C Beyond ntohl()?

Barbara Streisand
Barbara Streisandasal
2024-10-30 11:27:27407semak imbas

How to Convert 64-Bit Integers in C   Beyond ntohl()?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn