[c++] little endian et big endian

little endian et big endian [c++] - C++ - Programmation

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
Reply

Marsh Posté le 08-11-2002 à 18:37:25   

Reply

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 [:mareek]


Message édité par mrbebert le 08-11-2002 à 20:44:31
Reply

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


Message édité par antp le 08-11-2002 à 20:40:24

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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.


Message édité par matafan le 08-11-2002 à 21:57:13
Reply

Marsh Posté le 08-11-2002 à 20:43:59    

oui, exact, je me suis planté dans l'écriture du nombre en hexa :jap:  [:proy]

Reply

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


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 08-11-2002 à 20:50:42    

Code :
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   i: Integer;
  4. begin
  5.   i := 2;
  6.   with TFileStream.Create('t:\bidon.dat', fmCreate) do
  7.     try
  8.       Write(i, SizeOf(i));
  9.     finally
  10.       Free;
  11.     end;
  12. end;


 
j'ai dans mon fichier vu en hexa : 02 00 00 00


Message édité par antp le 08-11-2002 à 20:50:59

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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 :pt1cable:

Reply

Marsh Posté le 08-11-2002 à 20:54:39    

Moi j'aime pas les indiens [:benou]
 
 
[:dehors2]

Reply

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 :pt1cable:  




 
dans ton post j'ai l'impression que tu disais le contraire :crazy:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 08-11-2002 à 21:30:35   

Reply

Marsh Posté le 08-11-2002 à 21:54:31    

Ah oui effectivement le petit bout c'est 0x11, pas 0x44 :o Donc mrbebert avait raison. En fait le truc c'est que j'imaginais l'exemple 0x11223344... Mais bon pas d'excuses.

Reply

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 :o Donc mrbebert avait raison. En fait le truc c'est que j'imaginais l'exemple 0x11223344... Mais bon pas d'excuses.


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 :D

Reply

Marsh Posté le 08-11-2002 à 22:16:44    

Rah le sauvage
Va finir par être dur à suivre ce thread :D

Reply

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
adr. little big  L  B
0000 21     87   21 43
0001 43     65   43 21
0002 65     43
0003 87     21


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)
0000 21 43 64 87 (little)
0000 87 65 43 21 (big)


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.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 10-11-2002 à 13:37:06    

merci pour vos reponse et correction ^^  :jap:


---------------
La Paix Est Le But La Trance Est Le Chemin www.tranceonline.ch
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed