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 :

big and little endian!!


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 60
    Points
    60
    Par défaut big and little endian!!
    pour eviter les problemes que peut évoqué une différence d'endianesse; j'ai trouvé dans une doc, qu'il faut utiliser l'opérateur << (shift) au lieu de cast pour l'opération de conversion!!!!!! mais j pas compris comment en utlisant un déclage peut changer le type!!!

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    C'est stupide. le cast d'une valeur marche parfaitement en toutes circonstances.

    Par contre, le cast d'un pointeur est à proscrire.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 60
    Points
    60
    Par défaut
    l'xemple trouvé est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int a;
    char b[4];
    a = *((int *)b);
    eviter ça par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int a;
    unsigned char b[4];
    a=(b[0]<<24)+(b[1]<<16)+(b[2]<<8)+b[3];
    !!!

  4. #4
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Une donnée en little endian ou en big endian n'a rien avoir avec le "type".
    C'est juste une façon de ranger la donnée en mémoire qui est fonction de ton architecture.
    Donc forcement cela ne se resoud pas à coup de "cast".
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 60
    Points
    60
    Par défaut
    alors, quel genre de probleme peut engendrer la différence d'endianesse, si on essaye d'exécuter un programe ecrit sous une architecture big endian, dans une architecture little endian?

  6. #6
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    C'est la lecture des nombres enregistrés qui pose problème, suppose 0x12345678 enregistré dans un type tu le liras 0x56781234 dans l'autre type ce qui change la valeur tu l'avoueras
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  7. #7
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par moon93
    alors, quel genre de probleme peut engendrer la différence d'endianesse, si on essaye d'exécuter un programe ecrit sous une architecture big endian, dans une architecture little endian?
    Ce n'est pas l'executable qui va poser problème, mais plutôt les données que tu manipules. Pour éviter ce genre de problème il faut absolument spécifier un format d'échange.
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 60
    Points
    60
    Par défaut
    je comprend pas bien, parce que les données que je manipule seront introduites en temps réel apres avoir lancer l'exécutable!!!

    stp, si tu peux m'explique d'avantage. merci

  9. #9
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par moon93
    je comprend pas bien, parce que les données que je manipule seront introduites en temps réel apres avoir lancer l'exécutable!!!

    stp, si tu peux m'explique d'avantage. merci
    Introduites par qui et comment ?
    Si les données que tu manipules sont purement internes, alors dans ce cas il n'y a pas de problème.
    Par contre si tu importes (ou exportes) les données par un moyen quelconque (fichier, réseau, etc..) dans ce cas il est important d'en connaître le format.
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 60
    Points
    60
    Par défaut
    par exemple, les données peuvent etre récupérées d'une carte a puce,

  11. #11
    Membre averti Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Points : 396
    Points
    396
    Par défaut
    Citation Envoyé par moon93
    par exemple, les données peuvent etre récupérées d'une carte a puce,
    Dans ce cas il peut y avoir probleme...

    Tant que les donnees restent internes, pas de probleme.

    Le probleme de l'endianness vient du fait que selon les architectures ou les moyens de transport, les donnees ne sont pas stockees de la meme maniere.

    Donc pour ta carte a puce, il faut que tu te renseigne sur la maniere dont les donnees sont encodees.
    Don't worry, be serious.
    La vie est courte. Prenez votre temps.

    Jack.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 60
    Points
    60
    Par défaut
    mon travail se situé a un niveau plus haut, c a d que les fonctions qui permet de lire ces cartes, ont était fournies, je récupère ces données et je les expoites!!!, donc si la différence d'endianesse est au niveau du lecteur de ces cartes, les API de ce lecteur me fournissent un format correcte de données! non?. et le fait que j tjr le meme OS ne résoud pas le probleme?

    execuse moi, si mes questions sont nulles!

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par moon93
    mon travail se situé a un niveau plus haut, c a d que les fonctions qui permet de lire ces cartes, ont était fournies, je récupère ces données et je les expoites!!!, donc si la différence d'endianesse est au niveau du lecteur de ces cartes, les API de ce lecteur me fournissent un format correcte de données! non?. et le fait que j tjr le meme OS ne résoud pas le probleme?
    Il faut lire la doc de l'API pour savoir quel est le format des données et si il est compatibles avec celui de l'architecture qui fait le traitement.
    Pas de Wi-Fi à la maison : CPL

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 60
    Points
    60
    Par défaut
    merci,

    donc, je peux avoir deux données différentes, pour la lecture d'une meme carte sur deux lecteurs a base d'architectures différentes?

  15. #15
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par moon93
    donc, je peux avoir deux données différentes, pour la lecture d'une meme carte sur deux lecteurs a base d'architectures différentes?
    La valeur sera la meme, mais la representation memoire (binaire, disons) peut etre differente. C'est assez simple: Si la carte envoie les donnees en big-endian et que la machine qui recoit les donnees est little-endian, alors il faut faire l'inversion des octets avant d'utiliser la variable. Si la machine est big-endian, alors il ne faut rien faire. Pour eviter ces complications, on choisit souvent d'emettre les donnees au format texte. Mais cela n'est pas toujours possible (pour des raisons de masse de donnees, par exemple). Dans ce cas, il faut prendre une convention (e.g. les reseaux travaillent en big-endian).

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 60
    Points
    60
    Par défaut
    donc, je px avoir des problemes (faire deux fois une conversion!!) meme Si la carte envoie les donnees en little-endian et que la machine qui recoit les donnees est aussi little, vu que les reseaux travaillent en big-endian).

  17. #17
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par moon93
    donc, je px avoir des problemes (faire deux fois une conversion!!) meme Si la carte envoie les donnees en little-endian et que la machine qui recoit les donnees est aussi little, vu que les reseaux travaillent en big-endian).
    Les reseaux travaillent en big-endian, certes, mais tu n'as pas a t'en pre-occupe. Je disais cela pour te donner une analogie avec ton probleme. Si tu sais que ta carte d'envoie du little-endian, alors tu fais la conversion si la machine est big-endian. Ce qui se passe entre la carte et la machine (i.e. transport reseau eventuel) est transparent et ne requiert pas d'action de ta part.

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Points : 60
    Points
    60
    Par défaut
    ok,je voie

    merci

Discussions similaires

  1. Conversion Big Endian vers Little Endian
    Par tupac25 dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2010, 16h40
  2. convertir little-endian en big-endian
    Par Montor dans le forum Contribuez
    Réponses: 16
    Dernier message: 13/11/2009, 16h56
  3. Little endian - Big endian
    Par julinho99 dans le forum Ada
    Réponses: 4
    Dernier message: 10/04/2008, 11h13
  4. Big endian et Little endian?
    Par moon93 dans le forum C
    Réponses: 4
    Dernier message: 07/05/2006, 22h48
  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