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

Barbara Streisand
Lepaskan: 2024-10-30 11:27:27
asal
405 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!