Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menukar Integer 64-Bit daripada Big Endian kepada Little Endian dalam C?

Bagaimana untuk Menukar Integer 64-Bit daripada Big Endian kepada Little Endian dalam C?

Linda Hamilton
Lepaskan: 2024-10-30 07:51:02
asal
1126 orang telah melayarinya

How to Convert 64-Bit Integers from Big Endian to Little Endian in C  ?

Penukaran Integer 64-Bit daripada Big Endian kepada Little Endian dalam C

Fungsi standard C ntohl() menukarkan integer 32-bit daripada susunan bait rangkaian (big-endian) untuk menjadi tuan rumah pesanan bait (little-endian) dan sebaliknya. Walau bagaimanapun, terdapat keperluan untuk menukar integer 64-bit (khususnya nilai panjang panjang yang tidak ditandatangani) pada sesetengah platform.

Malangnya, piawaian C tidak menyediakan fungsi khusus untuk penukaran integer 64-bit. Walau bagaimanapun, pelaksanaan khusus platform wujud.

Penyelesaian Khusus Platform

  • Linux dan FreeBSD: htobe64 dan be64toh ditakrifkan dalam < ;endian.h> untuk penukaran integer 64-bit.
  • OpenBSD: Makro tersuai be16toh, be32toh dan be64toh tersedia dalam untuk penukaran pesanan bait.

Contoh Kod

Kod berikut boleh digunakan untuk menukar integer 64-bit pada pelbagai platform:

<code class="cpp">#include <stdint.h> // For 'uint64_t'

#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

int main() {
  uint64_t host_int = 123;
  uint64_t big_endian;

  // Convert to big-endian
  big_endian = htobe64(host_int);

  // Convert back to host byte order
  host_int = be64toh(big_endian);

  return 0;
}</code>
Salin selepas log masuk

Contoh ini akan melaksanakan penukaran integer 64-bit pada Linux, FreeBSD dan OpenBSD menggunakan fungsi khusus platform yang sesuai.

Atas ialah kandungan terperinci Bagaimana untuk Menukar Integer 64-Bit daripada Big Endian kepada Little Endian 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