IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Aide Endianess Big-little


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Février 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 80
    Par défaut Aide Endianess Big-little
    J'ai recherché dans le forum les sujets concernant le problème endianess et ça m'est toujours un peu confus.

    Infile est un fichier binaire qui est lu et xin est un int:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InFile.read(reinterpret_cast<char*>(&xin), sizeof(int));
    Que fait la ligne précédente exactement ? Je l'utilise sans trop la comprendre.

    Je voulais savoir comment je peux récupérer les 4 octets de mon fichier binaire dans un char* pour pouvoir le manipuler correctement : (intervertir les octets)
    Et ensuite comment le recaster le char* en int.

    Merci

  2. #2
    Membre confirmé
    Inscrit en
    Février 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 80
    Par défaut
    J'ai essayé de faire quelque chose pour résoudre ce problème mais c'est archi faux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
       InFile.seekg(pos,ios_base::beg);
       InFile.read(reinterpret_cast<char*>(&xin), sizeof(int));
     
       cout<<"valeur de xin "<<xin<<endl;
     
       char* octect = reinterpret_cast<char*>(&xin);
       char bytes0 = octect[0];
       char bytes1 = octect[1];
       char bytes2 = octect[2];
       char bytes3 = octect[3];   
     
       octect[0] = bytes3;
       octect[1] = bytes2;
       octect[2] = bytes1;
       octect[3] = bytes0; 
     
       reinterpret_cast<int>(&octect);
     
       cout<<" valeur de xin " <<xin<<" octect "<<octect<<" Taille du fichier "<<size<<" position "<<pos<<endl;   
       return xin;
    Dans un premier temps, je lis le fichier et je sors la valeur dans xin. J'obtiens 2 (logique c'est ce que je voulais).

    Après j'essaye de traiter xin pour le faire passer en big-endian (ou little).
    Je pensais qu'en faisant ça j'obtiendrais la valeur de octet en int en big-endian.

    voila ce que j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    valeur de xin 2
     valeur de xin 33554432 octect  Taille du fichier 21 position 0
    Premièrement, pourquoi la valeur de xin a été modifiée ?
    Deuxiemement,pourquoi je n'obtiens rien pour octect ?

  3. #3
    Membre confirmé
    Inscrit en
    Février 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 80
    Par défaut
    En fait ça a l'air d'être ça car :
    - 2 en binaire sur 32bits : 00000000 00000000 00000000 0000010
    - 33554432 en binaire sur 32 bits : 00000010 00000000 00000000 00000000

    J'ai réussi à intervertir les octects mais est ce le bon résultat. Ne devrais je pas obtenir le chiffre 1073741824 correspondant en binaire à :
    01000000 00000000 00000000 00000000

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Non, on parle bien au niveau octet pas au niveau bit :
    abcd -> bcda en octet
    a0a1a2a3a4a5a6a7 b1b2b3b4b5b6b7 -> b1b2b3b4b5b6b7 a0a1a2a3a4a5a6a7
    si aN/bN sont des bits
    Donc ton résultat est conforme à ce que tu as voulu écrire.

  5. #5
    Membre confirmé
    Inscrit en
    Février 2010
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 80
    Par défaut
    Ok ça a l'air correct alors. Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Jouer avec big/little endian
    Par sopsag dans le forum Virtualisation
    Réponses: 1
    Dernier message: 26/05/2010, 15h24
  2. big and little endian!!
    Par moon93 dans le forum C
    Réponses: 17
    Dernier message: 31/05/2006, 14h38
  3. Big endian et Little endian?
    Par moon93 dans le forum C
    Réponses: 4
    Dernier message: 07/05/2006, 22h48
  4. Cast et little/big endian
    Par progfou dans le forum C
    Réponses: 8
    Dernier message: 29/03/2006, 18h54
  5. [6809] Documentation opcodes ? Big ou little endian ?
    Par krhamidou dans le forum Autres architectures
    Réponses: 2
    Dernier message: 21/01/2006, 16h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo