Big endian vs Little endian
Big endian vs little endian, ovvero il problema della “endianness”
I computer sono macchine (HW); ogni operazione che li riguarda deve essere realizzata secondo standard convenuti; solo così i circuiti possono essere costruiti e funzionare correttamente.
Il problema
Uno dei problemi che si è presentato agli inizi della tecnologia coi computer è stato quello dell’ordine dei byte, ovvero più specificamente:
- ordine di memorizzazione dei byte in memoria e/o
- ordine di emissione/ricezione dei byte/bit in linea
Partiamo con un esempio che spiega bene la questione: dovete memorizzare in RAM un numero intero a 16 bit, 0123h; esso è costituito da 2 byte: 01h e 23h; 01h è il byte più significativo (MSB) mentre 23h è quello meno significtivo (LSB). Come possono essere collocati in memoria questi byte? In due modi:
- memorizzando prima (=alla locazione di memoria inferiore) il byte 01h e subito dopo il byte 23h. In questo modo quello che viene memorizzato prima è il byte più significativo. Questa modalità prende il nome di BIG ENDIAN
Oppure:
- memorizzando prima (=alla locazione di memoria inferiore) il byte 23h e subito dopo il byte 01h. In questo modo quello che viene memorizzato prima è il byte meno significativo. Questa modalità prende il nome di LITTLE ENDIAN
I µP della Intel memorizzano i byte in modalità LITTLE ENDIAN.
La rilevanza della questione diventa notevole quando macchine con diverse convenzioni debbono comunicare, per esempio via Internet, e trasmettere una all'altra dei numeri.
Facciamo ora un esempio con le trasmissioni di bit. Lo standard RS-232C riguarda la trasmissione seriale a corta distanza di byte; come tutte le trasmissioni seriali, spedisce in linea un bit alla volta. Prendiamo il caso di dover trasmettere il byte 01000001. La modalità forse più naturale per trasmetterlo è quella di inviare in linea 0, poi 1, poi 0 .. 0 .. 0 .. 1 .. 0 .. 0, cominciando quindi prima col bit più significativo; questa sarebbe una modalità BIG ENDIAN.Lo standard RS-232C prevede invece la modalità LITTLE ENDIAN, quindi l’ordine di uscita dei bit dalla porta seriale sarà: 0 → 0 → 1 → 0 → 0 → 0 → 0 → 1
Esistono anche possibilità miste. Per esempio l’interfaccia Ethernet manda in linea i byte in BIG ENDIAN, ma i bit in LITTLE ENDIAN. Se si deve trasmettere la sequenza di 3 byte: 01-23-56h, che in termini di bit corrisponde a 0000 0001 0010 0011 0101 0110, in linea si troverà questa sequenza:
1000 0000 1100 0100 0110 1010