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

Susan Sarandon
Lepaskan: 2024-11-02 08:20:02
asal
600 orang telah melayarinya

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

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

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!

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!