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
Linda Hamiltonasal
2024-10-30 07:51:02976semak imbas

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>

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