El endianess se utiliza para referirse a donde están ubicados los dos bits: mas y menos significativos cuando representamos un dato, o por sus acronimos LSB y MSB.
Las arquitecturas de procesadores mas conocidas que utilizan little-endian son: x86 (x86-64), 6502 (65802, 65C816), Z80 ( Z180, eZ80), MCS-48, 8051, DEC Alpha, Altera Nios II, Atmel AVR, SuperH, VAX, y por ultimo, PDP-11.
Las arquitecturas de procesadores mas conocidas que utilizan little endian son: Motorola 6800 and 68k, Xilinx Microblaze, IBM POWER, y System/360, System/370, ESA/390, y z/Architecture. La PDP-10 para direccionamiento. SPARC históricamente utilizo big-endian hasta la version 9 la cual es bi-endian al igual que la arquitectura ARM que fue little-endian hast a la version 3 hasta que cambio a bi-endian, Por ultimo PowerPC y la Power Architecture decendiente de IBM POWER son tambien bi-endian.
Nota: bi-endian se refiere a la capacidad del procesador de trabajar tanto en modo big-endian como little-endian.
También cabe destacar que los protocolos de transmisión de datos seriales como USB, RS232, RS422, y RS485 son little-endian.
Un ejemplo practico:
Para representar un integer 1 en big-endian lo haríamos de la siguiente forma (mostrándolo bit por bit) 0000 0000 0000 0001, y para hacerlo en lite-endian seria 1000 0000 0000 0000.
Ya sabemos que el tipo de dato integer ocupa 4 bytes y que el tipo char solo ocupa 1 byte, por lo cual solo tenemos que mirar en el primero de los bytes y ver si el valor guardado es 1 o 0:
#include <stdio.h>
/*
Endianess detection
*/
int isBigEndian(){
int i=1;
char *low = (char*) &i; /*grabamos en el puntero tipo char una conversion tipo char de otro puntero al valor 1*/
return *low ? 0 : 1; /*miramos si el primer byte contiene el valor 0 o 1*/
}
int main(int argc, char *argv[]){
if(isBigEndian())
printf("System is big-endiann\n");
else
printf("System is lite-endian\n");
return 0;
}
Por ultimo compilamos y probamos:





