L'endiveté, c'est données numériques quand un nombre est trop grand pour tenir dans un octet. Le texte ASCII, par exemple, n'est qu'une suite d'octets, sans tenir compte de l'endive.
Si on met un petit nombre comme 42 dans un entier de 32 bits (4 octets), on voit que avec big endian (BE), seul le dernier octet est utilisé. y avec little endian (LE), seul le premier octet est utilisé. :
| | byte[0] | byte[1] | byte[2] | byte[3] |
|----+---------+---------+---------+---------|
| BE | 0 | 0 | 0 | 42 |
| LE | 42 | 0 | 0 | 0 |
L'endiveté de l'architecture est l'endiveté du CPU. La RAM ne fait pas de maths, donc elle s'en moque.
Les dispositifs tels que les cartes son ne sont pas indifférents (par exemple, l'audio 16 bits 44100 kHz est principalement BE), mais c'est Système d'exploitation (pilote de périphérique) responsabilité de dire au CPU de peut-être convertir l'endianness avant de l'envoyer à la carte son.
Dans les réseaux, presque tout est en big endian. donc le système d'exploitation doit dire aux processeurs little endian de échange d'octets entiers au fur et à mesure que les paquets réseau sont construits.
Les systèmes de fichiers existent dans les deux types d'endiennage. Par exemple, FAT32 est LE, donc seules les architectures BE doivent effectuer un échange d'octets lorsqu'elles utilisent FAT32.
En programmation réseau C, vous devez vous souvenir d'utiliser htonl()
y ntohl()
-Les fonctions de conversion entre l'ordre des octets de l'hôte (natif) et celui du réseau. Lorsque le programme est compilé sur un système big endian, les fonctions ne font rien. Sur les systèmes little endian, elles échangent l'ordre des octets.
L'endiveté de l'architecture est une chose au niveau de l'octet. L'ordre/numérotation des bits n'est pas pertinent lorsqu'on considère l'endiannabilité de l'architecture. Mais c'est toujours bon à savoir :)
En gros, le LSB (Least Significant Bit) en premier est le LE du monde des bits et le MSB (Most Significant Bit) en premier est le BE du monde des bits.
La plupart des CPU et des bus série semblent être (étonnamment) LSB, même sur les systèmes big endian tels que SPARC. Ethernet est également LSB malgré le fait que les octets sont généralement dans l'ordre big endian. D'autre part, par exemple, le PPC est big endian et MSB en premier.
0 votes
Je ne connais pas grand-chose à ce sujet, mais en lisant l'article dont vous donnez le lien, j'en conclus que 1. Pas sur les systèmes bi-endian, sinon, oui. 2. Pas sur l'endianness du CPU, car ils n'ont pas besoin de modifier réellement les données qu'ils contiennent. Voir la section sur l'échange de fichiers et d'octets pour les questions connexes. 3. Oui, pour les architectures bi-endiennes. Quelqu'un doit décider.
0 votes
@Daniel : Merci ! Que voulez-vous dire par "Pas d'endiveté du CPU" ?
1 votes
D'autres matériels peuvent avoir besoin d'être conscients des problèmes d'endianness (le réseau est mentionné dans l'article). C'est pourquoi j'ai essayé de distinguer le type de problème auquel vous faites référence en l'appelant "endianness du CPU".
0 votes
On devrait peut-être ajouter que certains processeurs (par exemple PowerPC) supportent les deux endianess. Ils commencent par un défaut, mais il peut être changé.