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!