little endian et big endian [c++] - C++ - Programmation
Marsh Posté le 08-11-2002 à 19:59:12
Ce ne sont pas des objets, mais un type de codage.
Ca dépend de la façon dont le processeur gère les entiers.
Prenons l'exemple d'une entier de 4 octets 0x44332211 en héxa.
Un processeur x86 va stocker en mémoire les octets 0x11 puis 0x22, 0x33 et enfin 0x44.
D'autres processeurs feront l'inverse en stockant d'abord l'octet de poids fort 0x44.
Ca pose problème quand tu envoies des données d'un ordinateur à l'autre. Les 4 octets représentant l'entier ne seront pas compris de la même façon.
Mais je sais jamais lequel est lequel
edit : évidemment, j'ai inversé le sens
Marsh Posté le 08-11-2002 à 20:40:14
intel il le stocke "à l'envers" il me semble, donc si tu regardes en hexa un fichier où tu as écris un integer, tu auras l'octet de poids faible en premier
donc 1 s'écrira 01 00 00 00 (4 octets, 4x 2 digits hexa), ça c'est big endian je crois...
Marsh Posté le 08-11-2002 à 20:42:36
C'est l'idée mais en fait c'est l'inverse. Les x86 sont little-endian, et vont stocker 0x44 (le "little end" ) en premier (aux adresses basses), et le 0x11 (le "big end" ) en dernier (aux adresses hautes).
Les processeurs Motorola, eux, sont par contre big-endian.
Edit : je réponsais bien sûr à mrbebert, antp s'est intercallé.
Re-edit après le 4ème post d'antp : évidemment ce qui est au dessus est faut. Le "little end" c'est 0x11, et c'est finalement tout comme a dit mrbebert.
Marsh Posté le 08-11-2002 à 20:43:59
oui, exact, je me suis planté dans l'écriture du nombre en hexa
Marsh Posté le 08-11-2002 à 20:48:14
heu t'es sûr que l'intel inverse pas ?
pcq quand je dois comparer une valeur lue dans un fichier, genre 0x11223344 vu par un éditeur hexa, en Pascal je dois taper $44332211
Marsh Posté le 08-11-2002 à 20:50:42
Code :
|
j'ai dans mon fichier vu en hexa : 02 00 00 00
Marsh Posté le 08-11-2002 à 20:52:43
Oui c'est ce que j'ai dit : l'octet le moins significatif en premier. Je répondais à mrbebert, tu t'es intercallé entre temps
Marsh Posté le 08-11-2002 à 21:30:35
Matafan a écrit a écrit : Oui c'est ce que j'ai dit : l'octet le moins significatif en premier. Je répondais à mrbebert, tu t'es intercallé entre temps ![]() |
dans ton post j'ai l'impression que tu disais le contraire
Marsh Posté le 08-11-2002 à 21:54:31
Ah oui effectivement le petit bout c'est 0x11, pas 0x44 Donc mrbebert avait raison. En fait le truc c'est que j'imaginais l'exemple 0x11223344... Mais bon pas d'excuses.
Marsh Posté le 08-11-2002 à 22:10:42
Matafan a écrit a écrit : Ah oui effectivement le petit bout c'est 0x11, pas 0x44 ![]() |
Je lui dit ou pas que c'est ce que j'avais mis quand il a écrit son post et que j'ai inversé ensuite
Marsh Posté le 09-11-2002 à 04:23:36
Bref, on parle d'inversion de posts... pardon, d'octets.
Si on stocke des nombres de 4 ou 2 octets à l'adresse 0:
0x87654321 0x4321 |
Le little-endian a l'avantage que les octets de même poids se trouvent au même endroit quelque soit la taille du type écrit.
Les éditeurs hexadécimaux nous embrouillent, car ils écrivent les octets comme du texte (de gauche à doite), alors que les deux chiffres héxadécimaux composant un octet sont écrit comme des chiffres (de droite à gauche):
00 01 02 03 (adresse) |
Le big-endian a l'avantage d'être plus lisible sous cette forme, mais c'est bien le seul intérêt que je que lui trouve.
Donc, les processeurs intels n'inversent rien du tout, pas plus que les motorola.
Ils sont l'inverse l'un de l'autre, c'est tout.
Marsh Posté le 10-11-2002 à 13:37:06
merci pour vos reponse et correction ^^
Marsh Posté le 08-11-2002 à 18:37:25
voila un copain ma demande ce que c etai que les objet c++ suivant :
little endian
big endian
mais j ai pas su lui dir alors je vien vous demande
mci
---------------
La Paix Est Le But La Trance Est Le Chemin www.tranceonline.ch