Résoudre le problème des architectures petit et gros boutistes

Problème

Dans votre environnement hétérogène, vous voulez communiquer à l’aide de fichiers ou de sockets même si les architectures sont différentes.

Solution

Il est préférable de transférer toutes les données sous forme de texte, ce qui permet de contourner élégamment le problème. Sinon, nous pouvons utiliser les fonctions de conversion machine <-> réseau ntohl(), htonl(), ntohs() et htons().

Discussion

Certaines machines stockent les données dans l’ordre où elles apparaissent, c’est-à-dire que 0x11223344 sera traité comme 0x11223344, ce qui est naturel. Les architectures PPC ou Sparc par exemple font comme tel. C’est ce qui s’appelle une architecture petit boutiste (little endian). D’autres architectures, principalement les PC, inversent l’ordre des octets, et traitent 0x11223344 comme 0x33441122. Si vous restez sur une machine, ou que vous échangez des données sur un parc de machines homogène, le problème ne se pose pas car ce qu’une machine code 0x11223344 en 0x33441122 et décode correctement, les autres le décodent de la même manière. Par contre, si une machine d’architecture par exemple gros boutiste (big endian) code 0x11223344 en 0x33441122 et qu’une architecture petit boutiste (little endian) relit et décode en 0x33441122 au lieu de 0x11223344...

Pour consulter la suite, découvrez le livre suivant :
couv_EI3CACT.png
60-signet.svg
En version papier
20-ecran_lettre.svg
En version numérique
41-logo_abonnement.svg
En illimité avec l'abonnement ENI
130-boutique.svg
Sur la boutique officielle ENI
Précédent
Créer un serveur TCP/IP ou UDP/IP qui utilise le démon inetd
Suivant
Modifier les options sur une socket