Maison  >  Article  >  développement back-end  >  Comment convertir des entiers 64 bits entre l'ordre des octets de l'hôte et du réseau en C ?

Comment convertir des entiers 64 bits entre l'ordre des octets de l'hôte et du réseau en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-02 08:20:02601parcourir

How to Convert 64-bit Integers Between Host and Network Byte Order in C  ?

Conversion endian 64 bits en C

La fonction htonl() est généralement utilisée pour convertir des entiers 32 bits de l'hôte en octet réseau commande. Cependant, cela peut ne pas être suffisant pour les entiers 64 bits, qui nécessitent une approche différente.

Solution multiplateforme

Pour une solution multiplateforme standard, envisagez en utilisant la fonction htobe64(). Cette fonction est disponible sous Linux et FreeBSD, et peut être utilisée comme suit :

<code class="cpp">#include <endian.h>

uint64_t host_int = 123;
uint64_t big_endian;

big_endian = htobe64(host_int);
host_int = be64toh(big_endian);</code>

Macro de préprocesseur

Si htobe64() n'est pas disponible, vous pouvez utiliser macros de préprocesseur pour masquer les différences de plate-forme. Le code suivant fait cela pour Linux, FreeBSD et OpenBSD :

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

Approche basée sur l'union

Une autre option consiste à utiliser une union pour représenter 64 bits. entiers au format big endian et little endian. Vous pouvez ensuite échanger les octets en conséquence. Cependant, cette approche peut échouer sur les plateformes big endian.

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