Représentation des données/Ordre des octets

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

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

Transtypages de pointeurs

modifier

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

Tester l'ordre des octets

modifier
#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");
        }
}