Endianness

 

Tout ceux qui ont déjà travaillé en C ou assembleur pour accéder directement au matériel mais sur différentes plateformes s'en sont déjà rendus compte:

Les différents types de microprocesseurs ne stockent pas les données en mémoire de la même façon !

En effet, lorsque l'on veut représenter un nombre entier tenant par exemple sur deux octets, on parlera de l'octet de poid fort et de l'octet de poid faible.

Pour connaitre la valeur de ce nombre, il faudra faire l'opértation suivante : poid fort * 256 + poid faible (on comprend alors mieux pourquoi poid fort et poid faible, le poid faible n'est qu'ajouté, alors que le poid fort est multiplié !)

Cependant, certains microprocesseurs stockent les informations de la manière suivante: poid fort puis poid faible (c'est le cas de la série des MC68000 par exemple), et d'autres de la manière suivante: poid faible puis poid fort (80x87 (ou compatible), 6502 et ses frêres par exemple) !!!

Ceci risque donc d'avoir des conséquences lorsque l'application sauvegardera des données dans un fichier avec un certain type de microprocesseur et que ce même fichier et relu par l'autre type !

Ceux qui par exemple ont voulu coder des programmes pour importer des images provenant d'autres systèmes ont fatalement du rencontrer le problème. Par exemple les fichiers BMP vers le monde Unix sous X Window ou l'encodage RVB sera BVR.

Où encore lors de transfert via le réseau de données entre deux machines différentes (cf. Network Byte Order et Host Byte Order)

 

Cet ordre s'appelle l'endianness...

Si vous venez lire les deux octets sans savoir comment ils ont été stockés initialement, vous aurez alors une chance sur deux de vous tromper lors de la reconstition du nombre qu'il représente !!!