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