Le probleme : plusieurs octets, quel ordre ?
Un entier de 4 octets comme 305419896 s'ecrit en hexadecimal 12 34 56 78 (quatre octets). En memoire, ces quatre octets se suivent - mais on peut les ranger de deux facons :
C'est exactement la meme valeur : seul l'ordre de rangement change. Le processeur sait relire dans son propre ordre - le probleme arrive quand deux machines ne sont pas d'accord.
D'ou vient ce drole de nom ?
De Les voyages de Gulliver (Jonathan Swift, 1726) : a Lilliput, deux camps se font la guerre pour savoir par quel bout casser un oeuf a la coque - le gros bout (Big-Endians) ou le petit bout (Little-Endians). Les informaticiens ont repris la querelle, mot pour mot, pour l'ordre des octets. Une guerre de cent ans... pour un oeuf.
Demo : range un entier en memoire
Tape un entier (sur 4 octets, donc de 0 a 4 294 967 295). La machine te montre ses octets dans les deux ordres.
Big vs little endian
Pourquoi ca compte (et quand)
Tant qu'un nombre reste dans une seule machine, l'endianness est invisible : le processeur range et relit dans son propre ordre. Le piege apparait quand des octets voyagent :
- un fichier binaire ecrit sur un Mac d'autrefois (big endian) et relu sur un PC (little endian) ;
- des donnees envoyees sur le reseau : Internet impose le big endian (le « network byte order ») pour que tout le monde s'accorde ;
- un capteur ou un microcontroleur qui envoie ses mesures dans son ordre a lui.
Si on lit dans le mauvais ordre, 305419896 devient 2018915346 - une valeur absurde, sans aucune erreur visible. D'ou la regle : pour des donnees binaires, on precise toujours l'ordre.
En Python, le module struct fait pareil : struct.pack(">i", n) pour big endian, "<i" pour little.
En resume
| Big endian | Little endian | |
|---|---|---|
| Ordre | gros bout d'abord | petit bout d'abord |
| Qui | reseau (Internet), anciens Mac, certains capteurs | Intel, AMD, la plupart des ARM |
| En Python | "big" / ">" | "little" / "<" |
→ Retour au decoupage des bits (IEEE 754), ou vois les catastrophes numeriques bien reelles.