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?
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 .
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.
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.
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
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.
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).
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é. .