Diferença entre a grande ordem Endiana e a pequena ordem de bytes Endiana

Qual é a diferença entre a grande ordem Endiana e a pequena ordem de bytes Endiana ?

ambos parecem estar relacionados com Unicode e UTF16. Onde exactamente usamos isto?

Author: Kiran, 2009-03-31

6 answers

Big-Endian (BE) / Little-Endian (LE) são duas maneiras de organizar palavras multi-bytes. Por exemplo, ao usar dois bytes para representar um caractere em UTF-16, existem duas maneiras de representar o caractere 0x1234 como uma cadeia de bytes (0x00-0xFF):

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

A fim de decidir se um texto usa UTF-16BE ou UTF-16LE, a especificação recomenda a prepend a Marca de ordem de bytes (BOM) para o texto, representando o carácter U+FEFF. Então, se os dois primeiros bytes de um UTF-16 codificados os ficheiros de texto são FE, FF, A codificação é UTF-16BE. Para FF, FE, é UTF-16LE.

Um exemplo visual: a palavra "exemplo" em diferentes codificações (UTF-16 Com 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

Para mais informações, leia a página da Wikipédia de Endianness e / ou UTF-16 .

 105
Author: Ferdinand Beyer, 2015-08-21 08:13:36
A resposta de Fernando (e de outros) está correcta, mas incompleta. [[4]}Big Endian (BE) / Little Endian (LE) não tem nada a ver com UTF-16 ou UTF-32. Eles existiam muito antes do Unicode, e afetam como os bytes de números são armazenados na memória do computador. Dependem do processador.

Se você tem um número com o valor {[[0]} então na memória ele será representado como 12 34 56 78 (BE) ou 78 56 34 12 (LE).

UTF-16 e UTF-32 estão representados em 2, respectivamente 4 bytes, assim a ordem dos bytes respeita a ordem que qualquer número segue nessa plataforma.

 28
Author: Mihai Nita, 2012-05-09 10:21:58

O UTF-16 codifica o Unicode em valores de 16 bits. A maioria dos sistemas de arquivos modernos operam em bytes de 8 bits. Então, para salvar um arquivo UTF-16 codificado para o disco, por exemplo, você tem que decidir qual parte do valor de 16 bits vai no primeiro byte, e qual vai para o segundo byte.

Wikipedia tem uma explicação mais completa.

 7
Author: joev, 2009-03-31 15:50:30

Little-endian: adj.

Descreve uma arquitetura de computador na qual, dentro de uma dada palavra de 16 ou 32 bits, bytes em endereços mais baixos têm menor significado (a palavra é armazenada 'little - end-first'). As famílias PDP-11 e VAX de computadores e microprocessadores Intel e um monte de hardware de comunicação e rede são little-endian. O termo é algumas vezes usado para descrever a ordenação de unidades que não bytes; na maioria das vezes, bits dentro de um byte.

Big-endian: adj.

[[1]] [Comum; das viagens de Swift através do famoso artigo sobre guerras sagradas e um apelo à paz por Danny Cohen, USC / ISI IEN 137, datado de 1 de abril de 1980]

Descreve uma arquitetura de computador na qual, dentro de uma dada representação numérica multi-bytes, o byte mais significativo tem o endereço mais baixo (a palavra é armazenada 'big-end-first'). A maioria dos processadores, incluindo a família IBM 370, o PDP-10, as famílias de microprocessadores Motorola, e a maioria dos vários projetos RISC são big-endian. A ordem byte Big-endian também é às vezes chamada de ordem de rede.

---do ficheiro jargão: http://catb.org / ~esr/jargon/html/index.html

 4
Author: Paul Reiners, 2010-05-04 15:37:25

Big-endian e little-endian são termos que descrevem a ordem em que uma sequência de bytes é armazenada na memória do computador.

1. Big-endian é uma ordem na qual o" big end " (valor mais significativo na sequência) é armazenado primeiro (no endereço de armazenamento mais baixo).

2. Little-endian é uma ordem na qual o" Little end " (valor menos significativo na sequência) é armazenado primeiro.

Por exemplo

Num computador big-endian, os dois bytes necessários para o número hexadecimal 4F52 seria armazenado como 4F52 em armazenamento (if 4F is stored at storage address 1000, for example, 52 will be at address 1001). Num pequeno sistema endiano, seria armazenado como 524F (52 at address 1000, 4F at 1001).
 2
Author: nagarajan, 2015-02-18 06:01:18

Byte ordenação (big ou little) deve ser especificado para Unicode/UTF-16 de codificação porque para códigos de caracteres que usa mais de um byte, há uma opção de leitura/gravação a byte mais significativo primeiro ou o último. Unicode / UTF-16, uma vez que eles são codificações de comprimento variável (ou seja, cada char pode ser representado por um ou vários bytes) exigem que isso seja especificado. (Note however that UTF-8 "words" are always 8-bits/one byte in length [though characters pode ser vários pontos], portanto não há problema com a enfianness.) Se o codificador de um fluxo de bytes representando o texto Unicode e o decodificador não estiverem de acordo sobre qual Convenção está sendo usada, o código de caracteres errado pode ser interpretado. Por esta razão, ou a Convenção de endianness é conhecida de antemão ou mais comumente uma marca de ordem de bytes é normalmente especificada no início de qualquer arquivo de texto Unicode / stream para indicar onde a grande ou pequena ordem endiana está sendo usado.

 1
Author: Noldorin, 2009-03-31 18:16:16