76 votes

Différence entre Big Endian et little Endian Ordre des octets

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 ?

5 votes

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.

127voto

Ferdinand Beyer Points 27723

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 .

0 votes

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.

0 votes

Si vous le souhaitez, vous pouvez changer les mots pour qu'ils aient plus de sens : [ En big endian, vous stockez l'octet le plus significatif dans la plus petite adresse. ] OU [ En big endian, vous stockez l'octet le moins significatif dans l'adresse la plus grande. ] Même chose

35voto

Mihai Nita Points 2870

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.

8voto

joev Points 1001

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.

1 votes

Cette réponse est incorrecte. L'endianement est lié à l'architecture matérielle sous-jacente.

7 votes

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.

1 votes

Compte tenu du contexte de la question, cette réponse est parfaitement acceptable, selon moi.

5voto

Paul Reiners Points 3484

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

1voto

Noldorin Points 67794

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

0 votes

Cette réponse est incorrecte. L'endianement est lié à l'architecture matérielle sous-jacente.

1 votes

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 !

0 votes

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.com

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.

Powered by:

X