Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menukar Integer 64-bit Antara Hos dan Pesanan Bait Rangkaian dalam C?

Bagaimana untuk Menukar Integer 64-bit Antara Hos dan Pesanan Bait Rangkaian dalam C?

Susan Sarandon
Susan Sarandonasal
2024-11-02 08:20:02688semak imbas

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

Penukaran Endian 64-bit dalam C

Fungsi htonl() biasanya digunakan untuk menukar integer 32-bit daripada hos kepada bait rangkaian pesanan. Walau bagaimanapun, ini mungkin tidak mencukupi untuk integer 64-bit, yang memerlukan pendekatan berbeza.

Penyelesaian Merentas platform

Untuk penyelesaian merentas platform standard, pertimbangkan menggunakan fungsi htobe64(). Fungsi ini tersedia di Linux dan FreeBSD, dan boleh digunakan seperti berikut:

<code class="cpp">#include <endian.h>

uint64_t host_int = 123;
uint64_t big_endian;

big_endian = htobe64(host_int);
host_int = be64toh(big_endian);</code>

Makro Prapemproses

Jika htobe64() tidak tersedia, anda boleh menggunakan makro prapemproses untuk menyembunyikan perbezaan platform. Kod berikut melakukan ini untuk 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>

Pendekatan Berasaskan Kesatuan

Pilihan lain ialah menggunakan kesatuan untuk mewakili 64-bit integer dalam format endian besar dan endian kecil. Anda kemudian boleh menukar bait dengan sewajarnya. Walau bagaimanapun, pendekatan ini mungkin rosak pada platform endian besar.

Atas ialah kandungan terperinci Bagaimana untuk Menukar Integer 64-bit Antara Hos dan Pesanan Bait Rangkaian 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