web-dev-qa-db-fra.com

Différence entre l'ordre Big Endian et Little Endian Byte

Quelle est la différence entre l'ordre Big Endian et Little Endian Byte?

Ces deux éléments semblent être liés à Unicode et UTF16. Où utilisons-nous exactement cela?

58
web dunia

Big-Endian (BE)/Little-Endian (LE) sont deux façons d'organiser les mots multi-octets. Par exemple, lorsque vous utilisez deux octets pour représenter un caractère en UTF-16, il existe deux façons de représenter le caractère 0x1234 sous la forme d'une chaîne d'octets (0x00-0xFF):

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

Afin de décider si un texte utilise UTF-16BE ou UTF-16LE, la spécification recommande d'ajouter un Byte Order Mark (BOM) à la chaîne, représentant le caractère U + FEFF. Ainsi, si les deux premiers octets d'un fichier texte encodé UTF-16 sont FE, FF, l'encodage est UTF-16BE. Pour FF, FE, c'est UTF-16LE.

Un exemple visuel: Le mot "Exemple" dans différents encodages (UTF-16 avec 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

Pour plus d'informations, veuillez lire la page Wikipedia de Endianness et/ou TF-16 .

112
Ferdinand Beyer

La réponse de Ferdinand (et d'autres) est correcte, mais incomplète.

Big Endian (BE)/Little Endian (LE) n'ont rien à voir avec UTF-16 ou UTF-32. Ils existaient bien avant Unicode et affectent la façon dont les octets de nombres sont stockés dans la mémoire de l'ordinateur. Ils dépendent du processeur.

Si vous avez un nombre avec la valeur 0x12345678 puis en mémoire il sera représenté comme 12 34 56 78 (BE) ou 78 56 34 12 (LE).

UTF-16 et UTF-32 se trouvent être représentés sur 2 respectivement 4 octets, donc l'ordre des octets respecte l'ordre que n'importe quel nombre suit sur cette plate-forme.

28
Mihai Nita

UTF-16 code Unicode en valeurs 16 bits. La plupart des systèmes de fichiers modernes fonctionnent sur des octets 8 bits. Ainsi, pour enregistrer un fichier encodé UTF-16 sur le disque, par exemple, vous devez décider quelle partie de la valeur 16 bits va dans le premier octet et laquelle va dans le deuxième octet.

Wikipedia a une explication plus complète.

7
joev

petit-boutien: adj.

Décrit une architecture informatique dans laquelle, dans un mot donné de 16 ou 32 bits, les octets situés à des adresses inférieures ont une signification plus faible (le mot est stocké "petit bout en premier"). Les familles d'ordinateurs et de microprocesseurs Intel PDP-11 et VAX ainsi que de nombreux équipements de communication et de réseau sont peu variés. Le terme est parfois utilisé pour décrire l'ordre des unités autres que les octets; le plus souvent, des bits dans un octet.

big-endian: adj.

[commun; Extrait des Voyages de Gulliver de Swift via le célèbre document On Holy Wars and a Plea for Peace de Danny Cohen, USC/ISI IEN 137, daté du 1er avril 1980]

Décrit une architecture informatique dans laquelle, dans une représentation numérique multi-octets donnée, l'octet le plus significatif a l'adresse la plus basse (le mot est stocké "big-end-first"). La plupart des processeurs, y compris la famille IBM 370, le PDP-10, les familles de microprocesseurs Motorola et la plupart des différentes conceptions RISC sont big-endian. L'ordre des octets big-endian est également parfois appelé ordre réseau.

--- à partir du fichier Jargon: http://catb.org/~esr/jargon/html/index.html

4
Paul Reiners

Big-endian et little-endian sont des termes qui décrivent l'ordre dans lequel une séquence d'octets est stockée dans la mémoire de l'ordinateur.

  1. Big-endian est un ordre dans lequel le "big end" (valeur la plus significative de la séquence) est stocké en premier (à l'adresse de stockage la plus basse).
  2. Little-endian est un ordre dans lequel la "petite fin" (valeur la moins significative dans la séquence) est stockée en premier.

Par exemple

Dans un ordinateur big-endian, les deux octets requis pour le nombre hexadécimal 4F52 Seraient stockés sous la forme 4F52 Dans la mémoire (if 4F is stored at storage address 1000, for example, 52 will be at address 1001).

Dans un système peu endien, il serait stocké sous la forme 524F (52 at address 1000, 4F at 1001).

2
nagarajan

Endianness octet (grand ou petit) doit être spécifié pour le codage Unicode/UTF-16 car pour les codes de caractères qui utilisent plus d'un octet, il y a le choix de lire/écrire le - octet de poids fort premier ou dernier. Unicode/UTF-16, car ce sont des codages de longueur variable (c'est-à-dire que chaque caractère peut être représenté par un ou plusieurs octets) nécessite que cela soit spécifié. (Notez cependant que les "mots" UTF-8 ont toujours une longueur de 8 bits/un octet [bien que les caractères puissent être plusieurs points], il n'y a donc pas de problème d'endianité.) Si l'encodeur d'un flux d'octets représentant du texte Unicode et le décodeur n'est pas d'accord sur la convention utilisée, le mauvais code de caractère peut être interprété. Pour cette raison, soit la convention de l'endianité est connue à l'avance, soit plus généralement un marque d'ordre des octets est généralement spécifié au début de tout fichier/flux de texte Unicode pour indiquer si un ordre endian grand ou petit est utilisé. .

1
Noldorin