Maison  >  Article  >  développement back-end  >  Comment convertir des entiers 64 bits de Big Endian à Little Endian en C ?

Comment convertir des entiers 64 bits de Big Endian à Little Endian en C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 07:51:02892parcourir

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

Conversion d'entiers 64 bits de Big Endian à Little Endian en C

La fonction C standard ntohl() convertit les entiers 32 bits de l'ordre des octets du réseau (big-endian) vers l'ordre des octets de l'hôte (little-endian) et vice versa. Cependant, il est nécessaire de convertir des entiers 64 bits (en particulier des valeurs longues non signées) sur certaines plates-formes.

Malheureusement, la norme C ne fournit pas de fonction dédiée pour la conversion d'entiers 64 bits. Cependant, des implémentations spécifiques à la plate-forme existent.

Solutions spécifiques à la plate-forme

  • Linux et FreeBSD : htobe64 et be64toh sont définis dans < ;endian.h> pour la conversion d'entiers 64 bits.
  • OpenBSD : Les macros personnalisées be16toh, be32toh et be64toh sont disponibles dans pour la conversion de l'ordre des octets.

Exemple de code

Le code suivant peut être utilisé pour convertir des entiers 64 bits sur diverses plates-formes :

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

Cet exemple effectuera une conversion d'entier 64 bits sous Linux, FreeBSD et OpenBSD en utilisant les fonctions spécifiques à la plate-forme appropriées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn