Ordine dei byte: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Protetto "Ordine dei byte": Reiterati vandalismi ([Modifica=Consentito solo agli utenti autoconvalidati] (scade il 17 nov 2017 alle 11:34 (UTC)) [Spostamento=Consentito solo agli utenti autoconvalidati] (scade il 17 nov 2017 alle... |
LiveRC : Annullate le modifiche di 138.41.2.252 (discussione), riportata alla versione precedente di RobyReal12 Etichetta: Annulla |
||
| (50 versioni intermedie di 31 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
Questa differenziazione non riguarda né la posizione dei [[Bit (informatica)|bit]] all'interno del byte (nel qual caso si parla di [[ordine dei bit]]) né le posizioni dei caratteri in una [[Stringa (informatica)|stringa]]. Ha invece importanza nell'interpretazione (o decodifica) delle codifiche multi-byte di stringhe di caratteri (ad esempio: la codifica [[UTF-16]] dello standard [[unicode]]).▼
==
▲Questa differenziazione non riguarda né la posizione dei [[Bit (informatica)|bit]] all'interno del byte,
La differenza tra i due sistemi è data dall'ordine con il quale i byte costituenti il dato da immagazzinare vengono memorizzati:▼
=== Classificazione ===
* ''little-endian'': memorizzazione che inizia dal byte meno significativo per finire col più significativo, è utilizzata dai processori [[Intel]];▼
[[File:32bit-Endianess.svg|miniatura|Diagramma che mostra le differenze tra la notazione ''little-endian'' e quella ''big-endian''|500x500px]]
* ''big-endian'': memorizzazione che inizia dal [[Bit più significativo|byte più significativo]] per finire col meno significativo, è utilizzata dai processori [[Motorola]] e nei protocolli usati in [[Internet]]; ▼
▲La differenza tra i due sistemi è data dall'ordine con
▲* ''big-endian'': memorizzazione/trasmissione che inizia dal
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.▼
▲* ''little-endian'': memorizzazione/trasmissione che inizia dal byte meno significativo (estremità più piccola) per finire col più significativo, è utilizzata dai processori [[Intel]];
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.
▲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.
▲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 36 ⟶ 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 45 ⟶ 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 83 ⟶ 90:
== Altri progetti ==
{{interprogetto|preposizione=sull'}}
{{portale|informatica}}
| |||