Home>>Big-endian e little-endian

 

Big-endian e little-endian sono due metodi differenti usati dai calcolatori per immagazzinare in memoria dati di dimensione superiore al byte (es. word, dword, qword).

Ad esempio, Intel e Digital usano il formato little endian mentre Motorola, IBM e Sun usano il formato big endian.
Il big-endian, dato che è stato scelto come ordine standard in molti protocolli utilizzati in Internet, viene anche chiamato network byte order. Per contro viene chiamato host byte order l'ordine nativo dell'host in uso.

Nel caso di una WORD (16 bit), il numero esadecimale 0x0123 verrà immagazzinato come:

 

      Little endian             Big endian
       +----+----+              +----+----+
       |0x23|0x01|              |0x01|0x23|
       +----+----+              +----+----+
byte:    0    1                   0    1

 

Nel caso di una DWORD (32 bit), il numero esadecimale 0x01234567 verrà immagazzinato come:

 

           Little endian             Big endian              
       +----+----+----+----+    +----+----+----+----+
       |0x67|0x45|0x23|0x01|    |0x01|0x23|0x45|0x67|
       +----+----+----+----+    +----+----+----+----+
byte:    0    1    2    3         0    1    2    3

 

(Negli esempi il valore in grassetto è il byte più significativo).

E' bene notare che, sia nel formato little endian sia nel formato big endian, i bit all'interno di ciascun byte rispettano il formato big endian

Di seguito due possibili funzioni per convertire rispettivamente una word ed una double word da un formato all'altro.

unsigned short int Endian_Word_Conversion(unsigned short int word)
{
return ((word>>8)&0x00FF) | ((word<<8)&0xFF00)  ;
}
unsigned long int Endian_DWord_Conversion(unsigned long int dword) {
return ((dword>>24)&0x000000FF)
| ((dword>>8)&0x0000FF00)
| ((dword<<8)&0x00FF0000)
| ((dword<<24)&0xFF000000);
}

Aggiungi commento




  Country flag
biuquote
  • Commento
  • Anteprima
Loading


Calendario

<<  febbraio 2012  >>
lumamegivesado
303112345
6789101112
13141516171819
20212223242526
2728291234
567891011

View posts in large calendar

Archivio

Licenza d'uso
Eccetto dove diversamente specificato, i contenuti di questo sito sono rilasciati mediante:

Licenza Creative Common