Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Melaksanakan Fungsi Pesanan Bait Integer 64-Bit Mudah Alih dalam C?

Bagaimana untuk Melaksanakan Fungsi Pesanan Bait Integer 64-Bit Mudah Alih dalam C?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-01 01:33:28410semak imbas

How to Implement a Portable 64-Bit Integer Byte Ordering Function in C  ?

Fungsi Susunan Integer Byte 64-Bit Mudah Alih dalam C

Soalan:

Bolehkah kita mendapatkan fungsi standard seperti htonl yang berfungsi dengan integer 64-bit dalam C , membenarkan penukaran kepada susunan bait rangkaian?

Jawapan:

Walaupun tiada fungsi yang ditakrifkan secara eksplisit seperti htonll dalam C perpustakaan standard, adalah mungkin untuk mencipta pelaksanaan mudah alih. Berikut ialah dua pendekatan:

Menggunakan Pengesanan Endianness Dinamik:

<code class="cpp">#define htonll(x) ((1 == htonl(1)) ? (x) : ((uint64_t)htonl((x) & 0xFFFFFFFF) << 32) | htonl((x) >> 32))
#define ntohll(x) ((1 == ntohl(1)) ? (x) : ((uint64_t)ntohl((x) & 0xFFFFFFFF) << 32) | ntohl((x) >> 32))</code>
  • Htonll makro menukar integer 64-bit x kepada susunan bait rangkaian dengan menukar Perkataan 32-bit jika seni bina sasaran adalah little-endian.
  • ntohll melakukan operasi terbalik, menukar daripada susunan bait rangkaian kepada susunan bait asli.

Menggunakan Makro Prapemproses :

<code class="cpp">#if __BIG_ENDIAN__
# define htonll(x) (x)
# define ntohll(x) (x)
#else
# define htonll(x) (((uint64_t)htonl((x) & 0xFFFFFFFF) << 32) | htonl((x) >> 32))
# define ntohll(x) (((uint64_t)ntohl((x) & 0xFFFFFFFF) << 32) | ntohl((x) >> 32))
#endif</code>
  • Pendekatan ini mentakrifkan htonll dan ntohll menggunakan makro prapemproses berdasarkan simbol prapemproses __BIG_ENDIAN__ atau __LITTLE_ENDIAN__ yang disediakan oleh kebanyakan penyusun.
  • Jika seni binanya besar endian (simbol ditakrifkan), fungsi hanya mengembalikan nilai input kerana tiada pertukaran bait diperlukan.
  • Untuk seni bina little-endian, fungsi melakukan pertukaran bait seperti dalam contoh sebelumnya.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Fungsi Pesanan Bait Integer 64-Bit Mudah Alih 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