Endianness
Endianness è un termine dell’informatica che descrive il modo in cui vengono memorizzati i dati. In particolare, definisce quale estremità di un tipo di dati composto da più byte contiene i valori più significativi. I due tipi di endianness sono big-endian e little-endian.
Big-endian
Il big-endian è il modo più comune di memorizzare dati binari. Inserisce per primo il valore più significativo (o più grande), seguito dai valori meno significativi. Ad esempio, la rappresentazione big-endian dell’intero 123 inserisce per primo il valore delle centinaia (1), seguito dal valore delle decine (2) e poi da quello delle unità (3), ovvero [123].
Little-endian
Il little-endian memorizza per primo il valore meno significativo, seguito da valori progressivamente più significativi. Ad esempio, il numero 123 nella notazione little-endian è [321]. La stringa "ABC" è rappresentata come [CBA].
Conversione dell’endianness
Nella maggior parte dei casi, gli sviluppatori non devono specificare l’endianness, poiché il compilatore genera il tipo di dati corretto per una specifica piattaforma. Tuttavia, un programma potrebbe dover elaborare dati in ingresso esterni, ad esempio un formato di file che memorizza i dati con un’endianness diversa. In questo caso, i dati devono essere convertiti da little-endian a big-endian o viceversa.
La conversione dell’endianness non è semplice come invertire i dati. Devono essere invertiti i byte, non i bit. In altre parole, ogni byte (ovvero ogni blocco di otto bit) deve rimanere invariato, ma l’ordine dei byte viene modificato. Questo può essere spiegato usando la rappresentazione esadecimale o binaria dei dati.
Ad esempio, l’intero 41.394 è rappresentato nella notazione big-endian come:
esadecimale: A1B2
binaria: 1010000110110010
La conversione di questi dati in little-endian non inverte i dati, ma i singoli byte che li compongono. L’esadecimale usa due cifre per rappresentare ogni byte – [A1][B2], mentre il binario usa otto cifre – [10100001][10110010].
Pertanto, la rappresentazione little-endian di 41.394 è:
esadecimale: B2A1
binaria: 1011001010100001
NOTE: Alcuni processori possono acquisire i dati sia in formato big-endian sia in formato little-endian senza bisogno di conversione. Questo viene chiamato accesso ai dati bi-endian.
Metti alla prova le tue conoscenze