Représentation des données/Ordre des octets

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche
Représentation des données
Modifier le modèle

Lorsque des données sont représentées sur plus d'un octet, l'ordre dans lequel les octets sont placés en mémoire peut être différent suivant les architectures, en fait il existe deux possibilités :

  • l'octet de poids fort vient en premier (il est placé à la plus petite adresse) ;
  • l'octet de poids faible vient en premier.

En anglais, on parle de big endian et de little endian.

Opérations dépendantes de l'ordre des octets[modifier | modifier le wikicode]

Unions[modifier | modifier le wikicode]

Les unions telles qu'utilisées en C ne sont pas portables.

Transtypages de pointeurs[modifier | modifier le wikicode]

Les transtypages de pointeurs tels qu'utilisés en C ne sont pas portables.

Tester l'ordre des octets[modifier | modifier le wikicode]

#include <stdio.h>

union TestEndian {
        unsigned long total;
        struct {
                unsigned char octet1;
                unsigned char octet2;
                unsigned char octet3;
                unsigned char octet4;
        } octets;
};

int main(int argc, char ** argv) {
        union TestEndian te;

        te.total = 0xFF;
        if (te.octets.octet1 == 0xFF) {
                printf("little endian\n");
        }
        else {
                printf("big endian\n");
        }
}