Endianness

La notion d'endianness désigne la façon dont les entiers de plus d'un octet (2, 4, 8, etc.) sont stockés octet par octet dans la mémoire. En particulier, l'architecture x86 est en little-endian, cela signifie que l'entier est stocké en partant de l'octet de poids faible.

Par exemple le nombre 0x12345678 serait stocké dans la mémoire comme 78 56 34 12. Cette notion est très importante quand on manipule les structures du processeur et peut avoir des implications étranges quand on manipule individuellement les octets d'un nombre:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
static int val = 0x12345678;
int *val_ptr = &val;

// On accède à notre entier octet par octet
char *ptr = (char *) val_ptr;

assert(ptr[0] == 0x78);
assert(ptr[1] == 0x56);
assert(ptr[2] == 0x34);
assert(ptr[3] == 0x12);

<