Maison > Article > développement back-end > Comment convertir des valeurs 64 bits entre l’ordre des octets du réseau et de l’hôte en C ?
Extensionntohl() pour les valeurs 64 bits
La fonction C ntohl() est généralement utilisée pour convertir des valeurs 32 bits à partir du réseau ordre des octets pour héberger l'ordre des octets. Cependant, dans certains scénarios, une opération similaire peut être nécessaire pour les valeurs 64 bits.
Solution
Les pages de manuel de htonl() indiquent sa limitation à 32- les valeurs de bits, car le long non signé sur certaines plates-formes a une taille de 32 bits. Pour répondre au besoin de conversion 64 bits, plusieurs approches peuvent être explorées :
Bibliothèque standard :
Suggestions d'implémentation :
Preprocessor Magic :
<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>
Exemple d'utilisation :
Grâce à la magie du préprocesseur, la conversion peut être effectuée à l'aide de l'extrait de code suivant :
<code class="cpp"> #include <stdint.h> uint64_t host_int = 123; uint64_t big_endian; big_endian = htobe64( host_int ); host_int = be64toh( big_endian );</code>
Cette approche fournit une interface standard de type bibliothèque C qui est compatible sur plusieurs plates-formes.
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!