Endianness

, par MiKaël Navarro

En informatique, certaines données telles que les nombres entiers peuvent être représentées sur plusieurs octets. L’ordre dans lequel ces octets sont organisés en mémoire est appelé endianness (mot anglais traduit par « boutisme »).

Ci-dessous donc, une proposition de code C perméttant de déterminer le “boutisme” de la machine sur laquelle ce programme tourne :

#include <stdio.h>
#include <stdlib.h>

#define LITTLE_ENDIAN 0
#define BIG_ENDIAN    1

int endianness(void)
{
 int i = 1;
 char *p = (char *) &i;
 if (p[0] == 1) {  /* lowest address contains the least significant byte */
   return LITTLE_ENDIAN;
 }
 else {
   return BIG_ENDIAN;
 }
}

typedef union
{
 int i;
 char c[4];
} u;

int main(void)
{
 u var;
 var.i = 0x12345678;

 printf("0x%x => %x %x %x %x\n", var.i, var.c[0], var.c[1], var.c[2], var.c[3]);
 /* If you get the output of the second line as "78 56 34 12", the machine is little endian.
    Instead if the output is "12 34 56 78", it's a big endian machine. */

 if (endianness()==LITTLE_ENDIAN) {
   printf("Little endian.");
 }
 else if (endianness()==BIG_ENDIAN) {
   printf("Big endian.");
 }
 else {
   printf("Endianness unknown!\n");
 }

 return EXIT_SUCCESS;
}

P.-S.

Les termes big-endian et little-endian ont été empruntés aux Voyages de Gulliver de Jonathan Swift, roman dans lequel deux clans de Lilliputiens se font la guerre à cause de la manière différente qu’ils ont de casser les œufs à la coque : par le gros ou le petit bout. La traduction française donne en général les termes gros-boutien et petits-boutien ; toutefois, en informatique, le suffixe -iste est employé de préférence à -ien.