Rumah > pembangunan bahagian belakang > C++ > 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
Lepaskan: 2024-10-31 04:42:30
asal
922 orang telah melayarinya

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

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

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 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