Quelle est la différence entre l'ordre des octets Big Endian et Little Endian ?
Les deux semblent être liés à Unicode et UTF16. Où les utilise-t-on exactement ?
Quelle est la différence entre l'ordre des octets Big Endian et Little Endian ?
Les deux semblent être liés à Unicode et UTF16. Où les utilise-t-on exactement ?
Big-Endian (BE) / Little-Endian (LE) sont deux façons d'organiser les mots à plusieurs octets. Par exemple, lorsqu'on utilise deux octets pour représenter un caractère en UTF-16, il y a deux façons de représenter le caractère 0x1234
comme une chaîne d'octets (0x00-0xFF) :
Byte Index: 0 1
---------------------
Big-Endian: 12 34
Little-Endian: 34 12
Afin de déterminer si un texte utilise UTF-16BE ou UTF-16LE, la spécification recommande de faire précéder le texte d'une balise Marque de l'ordre des octets (BOM) à la chaîne, représentant le caractère U+FEFF. Ainsi, si les deux premiers octets d'un fichier texte codé en UTF-16 sont FE
, FF
le codage est UTF-16BE. Pour FF
, FE
il s'agit de l'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 de plus amples informations, veuillez lire la page Wikipedia de Endianness et/ou UTF-16 .
L'endiannité est perpétuellement contre-intuitive dans la mesure où BE stocke l'octet le plus significatif dans la plus petite adresse, et non dans la dernière/fin. Peu importe. Ce site rend les choses claires, Grand et petit Endian , En big endian, vous stockez l'octet le plus significatif dans la plus petite adresse. D'ailleurs, le Exemple visuel a été utile.
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 manière dont les octets de chiffres sont stockés dans la mémoire de l'ordinateur. Ils dépendent du processeur.
Si vous avez un nombre avec la valeur 0x12345678
alors, en mémoire, il sera représenté comme 12 34 56 78
(BE) ou 78 56 34 12
(LE).
Les UTF-16 et UTF-32 sont représentés sur 2 et 4 octets respectivement, de sorte que l'ordre des octets respecte l'ordre que tout nombre suit sur cette plate-forme.
UTF-16 encode Unicode en valeurs de 16 bits. La plupart des systèmes de fichiers modernes fonctionnent avec des octets de 8 bits. Ainsi, pour enregistrer un fichier codé UTF-16 sur le disque, par exemple, vous devez décider quelle partie de la valeur de 16 bits va dans le premier octet et quelle partie va dans le deuxième octet.
Wikipedia a une explication plus complète.
Cette réponse est incorrecte. L'endianement est lié à l'architecture matérielle sous-jacente.
Vous pouvez stocker un fichier codé UTF-16 dans l'un ou l'autre ordre d'octets, quel que soit le matériel sous-jacent.
Compte tenu du contexte de la question, cette réponse est parfaitement acceptable, selon moi.
little-endian : adj.
Décrit une architecture informatique dans laquelle, à l'intérieur d'un mot de 16 ou 32 bits, les octets situés à des adresses inférieures ont une signification moindre (le mot est stocké "petit bout d'abord"). Les familles d'ordinateurs PDP-11 et VAX, les microprocesseurs Intel et une grande partie du matériel de communication et de mise en réseau sont little-endian. 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 ; tiré de Gulliver's Travels de Swift via le célèbre article 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 370 d'IBM, le PDP-10, les familles de microprocesseurs Motorola et la plupart des diverses conceptions RISC sont big-endian. L'ordre des octets big-endian est aussi parfois appelé ordre réseau.
--- du dossier Jargon : http://catb.org/~esr/jargon/html/index.html
Endiannité des octets (big ou little) doit être spécifié pour le codage Unicode/UTF-16 parce que pour les codes de caractères qui utilisent plus d'un seul octet, il y a un choix à faire entre la lecture et l'écriture de l'en-tête de l'utilisateur. octet le plus significatif premier ou dernier. Unicode/UTF-16, étant donné qu'il s'agit de codages à longueur variable (c'est-à-dire que chaque caractère peut être représenté par un ou plusieurs octets) nécessitent 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 des points multiples], il n'y a donc pas de problème d'endianness). Si l'encodeur d'un flux d'octets représentant du texte Unicode et le décodeur ne sont 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'endiveté est connue à l'avance, soit, plus communément, un code de l'endiveuse est utilisé. marque de l'ordre des octets est généralement spécifié au début de tout fichier/flux de texte Unicode pour indiquer si l'ordre big ou little endian est utilisé.
Cette réponse est incorrecte. L'endianement est lié à l'architecture matérielle sous-jacente.
UTF-8 est un encodage à longueur variable, utilisant 1 à 6 octets par caractère et n'est donc pas fixé à un seul octet comme indiqué ici !
Bon, je n'ai pas dit que l'endianness dépend de l'architecture matérielle, mais je ne vois pas en quoi ma réponse est explicitement incorrecte. Considérez que les fichiers texte écrits/lus sur différentes architectures doivent avoir leur endianness connu.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
5 votes
fr.wikipedia.org/wiki/Endianness
0 votes
N'oubliez pas le MIDDLE endian. C'est sur la page wiki.
4 votes
@Mitch : on peut dire la même chose pour à peu près n'importe quelle question.
1 votes
@Jon B : Oui, c'est possible, mais il est préférable de répondre à certaines questions par une recherche soutenue plutôt que par quelques réponses données par certains experts.
0 votes
@BALAMURUGAN : BigEndian et Little Endian n'interviennent que lorsqu'il y a des données multi-octets.
1 votes
Bon résumé, consultez ce lien queryhome.com/27383/endianness-and-byte-order
0 votes
Bien expliqué betterexplained.com/articles/