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 :

Virgule flottante et passage big endian vers little endian


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 55
    Par défaut Virgule flottante et passage big endian vers little endian
    Bonjour,

    J'ai un composant en C qui se charge de décoder des fichiers binaires en ASCII.
    Cependant, ce composant doit pouvoir être utilisable sur une architecture little endian (Linux 64bits).
    Auparavant, il était exécuté sur une architecture big endian (AIX).
    L'ordre des octets des fichiers binaires se retrouvent donc inversées, j'ai donc utilisé les fonctions htobexx.

    Cependant, pour les nombres à virgule flottante (simple ou double précision), ces fonctions ne semblent pas fonctionner.
    En effet, j'obtiens toujours la valeur 0.

    Auriez-vous des pistes de recherche ou des éléments de réponse quant à ma problématique ?

    Cordialement,
    bogue

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 527
    Par défaut
    Bonjour,

    Trois possibilités :
    • Soit la machine initiale utilise un format de flottant qui n'est pas le même (IEEE 754) ;
    • Soit tu as fait une erreur dans la largeur de tes nombres (32 ou 64 bits) ;
    • Soit encore, c'est le plus probable, tu as directement passé tes flottants (donc leur valeur) à tes fonctions, au lieu d'utiliser un pointeur vers les données en mémoire, pointeur éventuellement transtypé en « (uintxx_t *) ». Si c'est le cas, ton nombre flottant sera converti en entier avant d'être traité et sa partie rationnelle sera tronquée.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 55
    Par défaut
    Merci pour ces éléments de réponse.
    Concernant le 3ème point, j'ai bien utilisé les fonctions de transformation depuis le pointeur vers les données en mémoire qui sont effectivement transtypées en (uint32_t)* pour les simple precision et (uint64_t)* pour les double précision.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 527
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 527
    Par défaut
    Citation Envoyé par bogue Voir le message
    Concernant le 3ème point, j'ai bien utilisé les fonctions de transformation depuis le pointeur vers les données en mémoire qui sont effectivement transtypées en (uint32_t)* pour les simple precision et (uint64_t)* pour les double précision.
    Montre-nous ton code s'il-te-plaît (avec les balises [CODE]).
    Tel que tu as écrit tes transtypages, tu vas d'abord chercher ta donnée (le flottant) PUIS tu la convertis en entier.

Discussions similaires

  1. Conversion Big Endian vers Little Endian
    Par tupac25 dans le forum Langage
    Réponses: 2
    Dernier message: 13/04/2010, 17h40
  2. Little endian - Big endian
    Par julinho99 dans le forum Ada
    Réponses: 4
    Dernier message: 10/04/2008, 12h13
  3. big and little endian!!
    Par moon93 dans le forum C
    Réponses: 17
    Dernier message: 31/05/2006, 15h38
  4. Big endian et Little endian?
    Par moon93 dans le forum C
    Réponses: 4
    Dernier message: 07/05/2006, 23h48
  5. [6809] Documentation opcodes ? Big ou little endian ?
    Par krhamidou dans le forum Autres architectures
    Réponses: 2
    Dernier message: 21/01/2006, 17h17

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