Maison > développement back-end > C++ > Comment convertir des entiers 64 bits en C au-delà de ntohl() ?

Comment convertir des entiers 64 bits en C au-delà de ntohl() ?

Barbara Streisand
Libérer: 2024-10-30 11:27:27
original
501 Les gens l'ont consulté

How to Convert 64-Bit Integers in C   Beyond ntohl()?

Conversion d'entiers 64 bits en C : au-delà de ntohl()

La fonction htonl(), comme suggérée par sa documentation, est limitée en conversion entière de 32 bits. Cependant, dans les situations où vous avez besoin d'une conversion 64 bits, plusieurs options sont disponibles.

Fonctions de bibliothèque standard

Pour Linux (glibc >= 2.9) et FreeBSD , la fonction htobe64() peut être utilisée pour convertir des entiers 64 bits de big endian en little endian. Cette fonction fait partie de la bibliothèque C standard.

Approche basée sur les unions

Vous pouvez également utiliser une union pour convertir entre des entiers de 64 bits et des entiers de 8 octets. tableaux de caractères. Cette approche implique d'échanger manuellement les octets pour les plates-formes big endian.

Macros de préprocesseur

Pour masquer les différences spécifiques à la plate-forme et fournir une approche unifiée, vous pouvez utiliser ce qui suit code du préprocesseur :

<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>
Copier après la connexion

Ce code fournit des macros de style Linux/FreeBSD sur Linux, OpenBSD, FreeBSD et NetBSD.

Exemple d'utilisation

Pour démontrer l'utilisation de l'approche recommandée, considérez le code suivant :

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

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

  big_endian = htobe64(host_int);
  host_int = be64toh(big_endian);

  return 0;
}</code>
Copier après la connexion

Ce code convertit un entier de 64 bits, host_int, du petit-boutiste au gros-boutiste et inversement, préservant efficacement sa valeur.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal