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 :

Récupérer poid fort / faible d'un float


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 22
    Points : 18
    Points
    18
    Par défaut Récupérer poid fort / faible d'un float
    Bonjour,

    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    float x = essai1.course ; // x = 536.65
    WORD Wb = LOWORD (x) ;
    WORD Wh = HIWORD (x) ;
    BYTE Bb1 = LOBYTE (Wb) ;
    BYTE Bb2 = HIBYTE (Wb) ;
    BYTE Bb3 = LOBYTE (Wh) ;
    BYTE Bb4 = HIBYTE (Wh) ;
     
    float y;
    y = MAKEWPARAM ( Wb, Wh);  // y = 536.00
    J'aimerai pouvoir récuperer la valeur y mais il m'a tronqué x...
    qu'en pensez vous ?
    Pour information, je veux décomposer le flottant pour l'envoyer dans des char via ModBus.

    Merci !

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Est-ce qu'on pourrait avoir un code fonctionnel pour voir exactement ce qui ne marche pas, et avec ?

  3. #3
    CGi
    CGi est déconnecté
    Expert éminent
    Avatar de CGi
    Inscrit en
    Mars 2002
    Messages
    1 045
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 1 045
    Points : 8 256
    Points
    8 256
    Par défaut
    Ce sont des macro de Windows que tu emplois.
    Elle ne sont pas destinées à des floats mais à des entiers.

    Tu pourais peut-être plutôt faire avec une union de ton float avec un tableau d'unsigned char.

  4. #4
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Désolé pour la balise, je n'y ai pas pensé.
    Qu'appelles tu du code fonctionnel ? Cette partie de code fonctionne bien, malgré que je n'arrive pas à récupérer les valeurs après la virgule...

    J'ai trouvé les fonctions LOWORD, LOBYTE, etc... dans l'aide mais apparement elles me tronquent x qui est égal à 536...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    float x = 536.65 ;
    WORD Wb = LOWORD (x) ;
    WORD Wh = HIWORD (x) ;
    BYTE Bb1 = LOBYTE (Wb) ;
    BYTE Bb2 = HIBYTE (Wb) ;
    BYTE Bb3 = LOBYTE (Wh) ;
    BYTE Bb4 = HIBYTE (Wh) ;
     
    float y;
    y= (float)MAKEWPARAM ( Wb, Wh);
    Apres lecture de y dans le debugger, je me retrouve avec y=536.00 ...


    Merci CGi, je vais tester l'union.

  5. #5
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    il n'existerait pas plus simplement une fonction qui retourne la valeur hexadecimale d'une valeur ( ici un float ) ? la fonction Hex() ... ? je vais essayer voir ...

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Du code fonctionnel = un code qui est compilable et exécutable
    En fait, ce qu'il faudrait que tu fasses, c'est faire un reinterpret_cast sur les pointeurs vers tes flottants puis ensuite tu peux peut-être utiliser ces macros, même si faire char haut = nouvel_entier >> 8; par exemple devrait pouvoir te permettre de faire quelque chose de plus portable.

Discussions similaires

  1. Comment avoir l'octet de poids fort et faible d'un nombre
    Par azerty25 dans le forum Général Python
    Réponses: 7
    Dernier message: 02/12/2015, 16h41
  2. [XL-2003] Concaténer un poids fort et faible pour former un Long
    Par Toto_le_héros38 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 15/07/2011, 12h53
  3. Réponses: 3
    Dernier message: 12/01/2011, 11h51
  4. inversion de bits (poid faible / poid fort)
    Par damdam78 dans le forum C++
    Réponses: 2
    Dernier message: 04/03/2009, 18h17
  5. conception - clef etrangère -cardinalité forte/faible
    Par sundjata dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 16/11/2005, 14h57

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