Ordine dei byte: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
| Nessun oggetto della modifica |  LiveRC : Annullate le modifiche di 138.41.2.252 (discussione), riportata alla versione precedente di RobyReal12 Etichetta: Annulla | ||
| (46 versioni intermedie di 30 utenti non mostrate) | |||
| Riga 1: {{F|informatica|luglio 2023}} L{{'}}'''ordine dei byte''' (conosciuto anche come '''big-endian''', '''little-endian''' o '''middle-endian''' a seconda dei metodi differenti), in [[informatica]],  ==  La ''endianness'' (ordine dei byte) di un computer dipende essenzialmente dall'architettura hardware usata. Ad esempio, [[Intel]] e [[Digital]] usano il formato little I termini big-endian e little-endian derivano, come racconta [[Jonathan Swift]] nel romanzo ''[[I viaggi di Gulliver]]'', dai nomi di due popolazioni che abitavano nelle favolose isole di [[Lilliput]] e [[Lilliput|Blefuscu]], che erano entrati in rivalità per il modo in cui aprivano le uova: rompendo la punta (a Lilliput, per editto dell'imperatore, il cui figlio una volta si tagliò aprendo un uovo dall'estremità più grande, fu ordinato di aprire le uova dall'estremità più corta: little endians) o il fondo (a Blefuscu, in cui si rifugiarono gli oppositori che volevano conservare la tradizione di rompere le uova dall'estremità più grande: big endians). A causa di questa differenza (e della sua legittimazione imperiale), era scoppiata tra le due isole una guerra sanguinosa.▼ ==  ▲I termini big-endian e little-endian derivano ▲La ''endianness'' (ordine dei byte) di un computer dipende essenzialmente dall'architettura hardware usata. Ad esempio, [[Intel]] e [[Digital]] usano il formato little endian mentre [[Motorola]], [[IBM]] e [[Sun Microsystems|Sun]] usano il formato big endian. Il formato dei dati contenuti nelle intestazioni dei [[Protocollo di rete|protocolli di rete]] è anch'esso big endian; altri esempi di uso di questi due diversi formati sono quello del bus [[Peripheral Component Interconnect|PCI]], che è little endian, o quello del [[VMEbus|bus VME]] che è big endian. == Descrizione == Questa differenziazione non riguarda né la posizione dei [[Bit (informatica)|bit]] all'interno del byte,  === Classificazione === [[File:32bit-Endianess.svg|miniatura|Diagramma che mostra le differenze tra la notazione ''little-endian'' e quella ''big-endian''|500x500px]] La differenza tra i due sistemi è data dall'ordine con  * '' * '' Nota bene: il termine ''endian'' genera spesso confusione; per ricordare correttamente la differenza si rammenti che ''endian'' si riferisce alla estremità da cui il dato originale comincia a essere elaborato (scritto/letto su/da memoria o trasmesso/ricevuto su/da canale di comunicazione), non a quale estremità finisce per ultima in memoria o su canale di comunicazione. L'ordine big-endian è stato scelto come ordine standard in molti protocolli utilizzati in [[Internet]], viene perciò anche chiamato ''network byte order''. Per contro viene chiamato ''host byte order'' l'ordine nativo dell'[[host]] in uso.▼ ▲L'ordine big-endian è stato scelto come ordine standard in molti protocolli utilizzati in [[Internet]], viene perciò anche chiamato ''network byte order''. Per contro viene chiamato ''host byte order'' l'ordine nativo dell'[[host]] === Uso dei formati di data ===▼ I termini vengono alle volte usati anche per indicare il formato di data:▼ * gg/mm/aaaa: la data europea è little-endian▼ * aaaa/mm/gg: la data big-endian è usata in [[Giappone]] e in [[ISO 8601]]▼ * mm/gg/aaaa: la data usata in [[Stati Uniti d'America|U.S.A.]] è middle-endian▼ === Esempi === Nel caso di una WORD (16 bit), il numero [[esadecimale]] 0x0123         Little         +----+----+              +----+----+         |0x23|         +----+----+              +----+----+   byte:    0    1                   0    1 Riga 35 ⟶ 33: Nel caso di una DWORD (32 bit), il numero [[esadecimale]] 0x01234567 verrà immagazzinato come:             Little         +----+----+----+----+    +----+----+----+----+         |0x67|0x45|0x23|         +----+----+----+----+    +----+----+----+----+   byte:    0    1    2    3         0    1    2    3 Riga 44 ⟶ 42: ==Funzioni per la conversione== Le seguenti [[Funzione (informatica)|funzioni === ====Conversione di word==== <syntaxhighlight lang="c">  unsigned short int Endian_Word_Conversion(unsigned short int word) {     return ((word>>8)&0x00FF) | ((word<<8)&0xFF00)  ;  } </syntaxhighlight> ====Conversione di double word==== <syntaxhighlight lang="c">  unsigned long int Endian_DWord_Conversion(unsigned long int dword) {     return ((dword>>24)&0x000000FF) | ((dword>>8)&0x0000FF00) | ((dword<<8)&0x00FF0000) | ((dword<<24)&0xFF000000);  } </syntaxhighlight> ===Implementazione in C#=== === <syntaxhighlight lang="c#">  public uint Endian_UInt32_Conversion(uint value){     return ((value >> 24) & 0x000000FF) | ((value >> 8) & 0x0000FF00) | ((value << 8) & 0x00FF0000) | ((value << 24) & 0xFF000000);  } </syntaxhighlight> ====UInt64==== <syntaxhighlight lang="c#">  public ulong Endian_UInt64_Conversion(ulong value){  | ((value << 24) & 0x0000FF00000000) | ((value << 40) & 0x00FF0000000000) | ((value << 56) & 0xFF000000000000);  } </syntaxhighlight> === Implementazione in C++ === Da C++23 è disponibile [https://en.cppreference.com/w/cpp/numeric/byteswap std::byteswap].  ▲I termini {{Senza fonte|vengono alle volte usati}} anche per indicare il formato di data: ▲* gg/mm/aaaa: la data europea è little-endian ▲* aaaa/mm/gg: la data big-endian è usata in [[Giappone]] e in [[ISO 8601]] ▲* mm/gg/aaaa: la data usata in [[Stati Uniti d'America|U.S.A.]] è middle-endian == Voci correlate == Riga 82 ⟶ 90: == Altri progetti == {{interprogetto|preposizione=sull'}} {{portale|informatica}} | |||