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 :

Conversion Float vers char[4]


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Par défaut Conversion Float vers char[4]
    Bonjour,

    j'ai des nombres en long int ( sur 4 octets ) que je souhaite ajouter dans une trame de char.
    pour ce faire, j'utilise le procédé suivant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char RX_Value[30];
    long int valeur=123456;
    RX_Value[0] = valeur       & 0xFF;
    RX_Value[1] = (valeur>>8)  & 0xFF;
    RX_Value[2] = (valeur>>16) & 0xFF;
    RX_Value[3] = (valeur>>24) & 0xFF;
    jusque là tout va bien

    Maintenant j'aimerai fais la meme chose pour un nombre codé en float ( 4 octets ).

    j'ai essaye le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    long int *tmp;
    float valeur_float;
    valeur_float = 123456.2;
    tmp=&valeur_float;
    afin d'avoir dans tmp les 4 octets qui me permettraient de stocker ensuite dans le tableau de char :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    RX_Value[0] = *tmp  & 0xFF;
    RX_Value[1] = (*tmp>>8)  & 0xFF;
    RX_Value[2] = (*tmp>>16) & 0xFF;
    RX_Value[3] = (*tmp>>24) & 0xFF;
    Mais le compilater ( visual studio ) refuse de compiler en mettant le message d'erreur suivant :

    c:\projet\ttcpip.cpp(367) : error C2440: '=' : cannot convert from 'float *' to 'long *'

    Quelqu'un sait-il comment réussir à copier ce float sur un char de 4 octet ( sans qu'il n'y ait de conversion ) ?

    Merci d'avance

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Par défaut
    hello,

    tente ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        long int *tmp;
        float valeur_float;
        valeur_float = 123456.2;
        tmp= (long int *)&valeur_float;

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Par défaut
    en fait ce que tu veux récupérer c'est quoi?
    ==>
    Les nombres de type float sont codés sur 32 bits dont :
    * 23 bits pour la mantisse
    * 8 bits pour l'exposant
    * 1 bit pour le signe

    ou bien la valeur?

  4. #4
    Membre éclairé
    Avatar de Le Farfadet Spatial
    Homme Profil pro
    En cours de précision…
    Inscrit en
    Avril 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : En cours de précision…

    Informations forums :
    Inscription : Avril 2008
    Messages : 190
    Par défaut
    Salut à tous !

    Citation Envoyé par loicounet Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        long int *tmp;
        float valeur_float;
        valeur_float = 123456.2;
        tmp= (long int *)&valeur_float;
    Quel horreur ! Une conversion de type C, la chose qu'il vaut mieux éviter en C++... static_cast, const_cast et dynamic_cast et reinterpret_cast sont la pour ça.

    Cela dit, pour répondre à Argol_Medusa, j'aurais besoin de savoir si tu veux convertir le flottant en entier long, où si tu veux enregistrer sa représentation binaire dans un entier long, ce qui n'est pas la même chose. Dans le premier cas, il s'agit d'une conversion, dans l'autre non.

    À bientôt.

    Le Farfadet Spatial

  5. #5
    Membre très actif Avatar de Argol_Medusa
    Homme Profil pro
    Ingénieur Radiofréquences
    Inscrit en
    Août 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Radiofréquences
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 208
    Par défaut
    Bonjour et merci pour vos réponses,

    Oui en fait je ne veux pas convertir un float en long int ( je perdrais l'information sur les décimales), mais prendre les 4 octets du float
    ( les 23 bits pour la mantisse, 8 bits pour l'exposant, 1 bit pour le signe ) et les mettre dans un tableau de Char : RX_Value[]

    Ce RX_Value[] contient des octets d'une trame, que je dois modifier, en remplaçant 4 octets (les premiers dans l'exemple que j'ai pris au-dessus) par un float avant réémission.


    Trame RX_Value[30] _,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
    float ( 4 octets )______________/


    Je connaissais pas les static_cast, const_cast et dynamic_cast, je vais regarder l'aide sur ces fonctions c'est peut-etre la solution

  6. #6
    Membre éclairé
    Avatar de Le Farfadet Spatial
    Homme Profil pro
    En cours de précision…
    Inscrit en
    Avril 2008
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : En cours de précision…

    Informations forums :
    Inscription : Avril 2008
    Messages : 190
    Par défaut
    Salut à tous !

    Citation Envoyé par Argol_Medusa Voir le message
    Je connaissais pas les static_cast, const_cast et dynamic_cast, je vais regarder l'aide sur ces fonctions c'est peut-etre la solution
    Non, ce n'est pas la solution : ces opérateurs sont là pour effectuer des conversions.

    C'est quelque chose de très spécifique que tu cherches à faire, vu que tu veux conserver exactement la même représentation binaire, mais en considérant les variables qui stockent les données non plus comme flottantes, mais comme entiers longs. Il y a un sujet sur Developpez.com qui parle de choses qui ressemblent un peu à ce que tu veux faire, je vais essayer de le retrouver.

    À bientôt.

    Le Farfadet Spatial

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    float mon_float = (float)12.34;
    unsigned long int *ptr = (unsigned long int *)&mon_float;
    unsigned long value = *ptr;
    TRACE(L"float %f=%ld", mon_float, value);
    Resultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    float 12.340000=1095069860
    Je pense que cela marche mais quelle horreur !!
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

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

Discussions similaires

  1. Conversion wchar_t ** vers char**
    Par progfou dans le forum C++
    Réponses: 21
    Dernier message: 23/02/2007, 10h12
  2. conversion gchar vers char
    Par shito dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 16/01/2007, 20h09
  3. Problème conversion float vers double
    Par jhenaff dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 27/01/2006, 10h39
  4. [MFC] Problème de conversion CString vers Char *
    Par Darkenshin dans le forum MFC
    Réponses: 10
    Dernier message: 02/12/2005, 14h42
  5. Conversion float vers int
    Par vargasvan dans le forum C
    Réponses: 2
    Dernier message: 05/10/2005, 17h29

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