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

Langage C++ Discussion :

Float et decalage d'octets


Sujet :

Langage C++

Vue hybride

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Par défaut Float et decalage d'octets
    Bonjour,
    J'ai un problème et je n'ai pas trouver ma réponse sur google alors je viens a vous

    J'ai une fonction template qui doit me retourner un tableau d'octet d'une variable passer en paramètre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    BYTE* tab_var = new BYTE[sizeof(T)];
    for(int i=0; i<sizeof(T); i++)
    {
      tab_var[i] = (BYTE)(convert_var >> (i*8));
    }
    mais le décalage de octet pour les type a partis décimale me donne une erreur a la compilation.
    Quelqu'un sait comment utiliser l’opérateur >> pour des type avec partis décimale ?

    Merci.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    1. utilise des tableaux à la C++ (-> vecteurs)
    2. utilise des transtypages à la C++ (-> *_cast<>())
    3. pour ton problème, utilise reinterpret_cast<>

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Par défaut
    Si je fait un reinterpret_cast<int> pour après décaler sa risque de changer ma valeur non ?

    Edit:
    Après lecture de la FAQ apparemment non un grand merci a toi !

    Enfaite ça ne marche pas quand même, j'ai toujours la même erreur en fesant comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            BYTE* tab_var = new BYTE[sizeof(T)];
        for(unsigned int i=0; i<sizeof(T); i++)
        {
            tab_var[i] = (BYTE)((reinterpret_cast<int>(convert_var)) >> (i*8));
        }

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Mettre en Résolu, dans ce cas. :-)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Par défaut
    Ca ne marche toujours pas ... voir dernière édition.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Primo, quel est exactement le message d'erreur ?

    Secundo, ton code pourrait être réécrit comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    std::vector<BYTE> tab_var;
    tab_var.resize(sizeof(T));
     
    for(int i=0; i<sizeof(T); i++)
    {
      tab_var[i] = reinterpret_cast<BYTE>(convert_var) >> (i*8);
    }
    Tertio, il faudra que tu m'expliques quel est l'intérêt d'appliquer un octet un décalage d'un multiple de 8 bits...

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Primo, quel est exactement le message d'erreur ?

    Secundo, ton code pourrait être réécrit comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    std::vector<BYTE> tab_var;
    tab_var.resize(sizeof(T));
     
    for(int i=0; i<sizeof(T); i++)
    {
      tab_var[i] = reinterpret_cast<BYTE>(convert_var) >> (i*8);
    }

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

Discussions similaires

  1. lire le Float qui correspond à 4 octets
    Par petitours dans le forum C#
    Réponses: 5
    Dernier message: 30/08/2011, 22h33
  2. Convertir 1 Float en 1 Tableau de 4 Octet
    Par SEB_GAPE dans le forum C
    Réponses: 12
    Dernier message: 23/05/2007, 15h18
  3. Conversion float -> n octets
    Par Fabllot dans le forum C
    Réponses: 4
    Dernier message: 22/05/2006, 20h00
  4. octet en double ou en float ??
    Par lykim dans le forum Langage
    Réponses: 16
    Dernier message: 16/05/2006, 23h43
  5. Réponses: 27
    Dernier message: 13/01/2006, 23h46

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