Differenza tra Big Endian e Little Endian Byte

Qual è la differenza tra l’ordine Big Endian e Little Endian Byte?

Entrambi sembrano essere correlati a Unicode e UTF16. Dove lo usiamo esattamente?

Big-Endian (BE) / Little-Endian (LE) sono due modi per organizzare parole multi-byte. Ad esempio, quando si usano due byte per rappresentare un carattere in UTF-16, esistono due modi per rappresentare il carattere 0x1234 come una stringa di byte (0x00-0xFF):

 Byte Index: 0 1 --------------------- Big-Endian: 12 34 Little-Endian: 34 12 

Per decidere se un testo utilizza UTF-16BE o UTF-16LE, la specifica consiglia di anteporre un Byte Order Mark (BOM) alla stringa, che rappresenta il carattere U + FEFF. Quindi, se i primi due byte di un file di testo con codifica UTF-16 sono FE , FF , la codifica è UTF-16BE. Per FF , FE , è UTF-16LE.

Un esempio visivo: la parola “Esempio” in diverse codifiche (UTF-16 con BOM):

 Byte Index: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ------------------------------------------------------------ ASCII: 45 78 61 6d 70 6c 65 UTF-16BE: FE FF 00 45 00 78 00 61 00 6d 00 70 00 6c 00 65 UTF-16LE: FF FE 45 00 78 00 61 00 6d 00 70 00 6c 00 65 00 

Per ulteriori informazioni, si prega di leggere la pagina di Wikipedia di Endianness e / o UTF-16 .

La risposta di Ferdinando (e altri) è corretta, ma incompleta.

Big Endian (BE) / Little Endian (LE) non hanno nulla a che vedere con UTF-16 o UTF-32. Esistevano molto prima di Unicode e influiscono sul modo in cui i byte dei numeri vengono memorizzati nella memoria del computer. Dipendono dal processore.

Se si dispone di un numero con il valore 0x12345678 nella memoria verrà rappresentato come 12 34 56 78 (BE) o 78 56 34 12 (LE).

UTF-16 e UTF-32 capita di essere rappresentati su 2 rispettivamente 4 byte, quindi l’ordine dei byte rispetta l’ordinamento che qualsiasi numero segue su quella piattaforma.

UTF-16 codifica Unicode in valori a 16 bit. La maggior parte dei moderni filesystem funziona con byte da 8 bit. Quindi, per salvare un file con codifica UTF-16 su disco, ad esempio, è necessario decidere quale parte del valore a 16 bit va nel primo byte e quale va nel secondo byte.

Wikipedia ha una spiegazione più completa.

little-endian: agg.

Descrive un’architettura di computer in cui, all’interno di una data parola a 16 o 32 bit, i byte degli indirizzi inferiori hanno un significato inferiore (la parola viene memorizzata ‘little-end-first’). Le famiglie di PDP-11 e VAX di computer e microprocessori Intel e un sacco di hardware di comunicazione e di rete sono poco endian. Il termine è talvolta usato per descrivere l’ordine di unità diverse dai byte; più spesso, bit all’interno di un byte.

big-endian: agg.

[Comune; Dai viaggi di Gulliver di Swift tramite il famoso paper On Holy Wars e un Plea for Peace di Danny Cohen, USC / ISI IEN 137, datato 1 aprile 1980]

Descrive un’architettura di computer in cui, all’interno di una determinata rappresentazione numerica multi-byte, il byte più significativo ha l’indirizzo più basso (la parola è memorizzata ‘big-end-first’). La maggior parte dei processori, tra cui la famiglia IBM 370, il PDP-10, le famiglie di microprocessori Motorola e la maggior parte dei vari progetti RISC sono big-endian. Anche l’ordine dei byte big-endian viene talvolta chiamato ordine di rete.

— dal file Jargon: http://catb.org/~esr/jargon/html/index.html

Big-endian e little-endian sono termini che descrivono l’ordine in cui una sequenza di byte è memorizzata nella memoria del computer.

1. Big-endian è un ordine in cui la “grande fine” (il valore più significativo nella sequenza) viene memorizzata per prima (all’indirizzo di memoria più basso).

2. Little-endian è un ordine in cui la “piccola estremità” (valore meno significativo nella sequenza) viene memorizzata per prima.

Per esempio

In un computer big-endian, i due byte richiesti per il numero esadecimale 4F52 verrebbero archiviati come 4F52 in memoria (if 4F is stored at storage address 1000, for example, 52 will be at address 1001).

In un sistema little-endian, verrebbe memorizzato come 524F (52 at address 1000, 4F at 1001).

Per la codifica Unicode / UTF-16 è necessario specificare il byte (big o piccolo), poiché per i codici carattere che utilizzano più di un singolo byte, è ansible scegliere se leggere / scrivere il byte più significativo prima o dopo. Unicode / UTF-16, dato che sono codifiche a lunghezza variabile (cioè ogni char può essere rappresentato da uno o più byte) richiedono che questo sia specificato. (Si noti tuttavia che le “parole” UTF-8 sono sempre di 8 bit / un byte di lunghezza [sebbene i caratteri possano essere più punti], quindi non c’è alcun problema con endianness.) Se l’encoder di un stream di byte rappresenta testo Unicode e il decodificatore non è stato concordato su quale convenzione viene utilizzata, il codice carattere errato può essere interpretato. Per questo motivo, la convenzione di endianness è nota in anticipo o più comunemente un segno di ordinamento dei byte viene in genere specificato all’inizio di qualsiasi file / stream di testo Unicode per indicare se viene utilizzato l’ordine big o little endian.