Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menukar Nilai 64-bit Antara Rangkaian dan Pesanan Byte Hos dalam C?

Bagaimana untuk Menukar Nilai 64-bit Antara Rangkaian dan Pesanan Byte Hos dalam C?

Barbara Streisand
Barbara Streisandasal
2024-10-31 04:42:30742semak imbas

How to Convert 64-bit Values Between Network and Host Byte Order in C  ?

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:

  • htobe64() dan be64toh() : Fungsi ini tersedia di Linux (glibc >= 2.9) dan FreeBSD untuk menukar nilai 64-bit antara endian besar dan endian kecil.

Cadangan Pelaksanaan:

  • Kesatuan dengan long long dan char yang tidak ditandatangani[ 8]: Kesatuan boleh digunakan untuk menukar bait secara manual jika platform tidak besar endian. Walau bagaimanapun, kaedah ini tidak disyorkan kerana ia bergantung pada andaian yang bergantung kepada sistem.

Sihir Prapemproses:

  • Pengepala khusus platform : Kod prapemproses berikut membolehkan kemudahalihan merentas platform berbeza, termasuk Linux, FreeBSD dan OpenBSD:
<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!

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