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 :

Créer un flux de floats


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 117
    Par défaut Créer un flux de floats
    Salut !

    J'ai un peu regardé la faq concernant les flots ...

    Je voudrais envoyer un tableau de floats (générés aléatoirement) par socket, en envoyant d'abord le tableau dans un flux puis envoyer ce flux par socket ...
    La seule chose que je trouve est de transformer le nombre en binaire ou en hexa pour l'envoyer puis de faire la conversion à la récupération du flux.

    Je me demandais s'il n'était pas possible de directement écrire les floats dans le flux en tant que binaire (écrire automatiquement les bits) plutôt que de passer par une string ou un caractère serait 0 ou 1 dans mon cas.

    En gros je voudrais pouvoir faire comme pour la lecture dans un fichier en binaire ...

    Quelqu'un aurait une solution ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Par défaut
    en envoyant d'abord le tableau dans un flux puis envoyer ce flux par socket
    Pourquoi vouloir passer par un flux ? C'est trop simple d'utiliser directement le tableau ?

    Mais bon, si tu veux créer un istream qui sorte des float non formatés, voilà quelques pistes :
    • la lecture de données binaires depuis un stream se fait avec des méthodes du type read()
    • pour utiliser l'opérateur >> il va falloir le surcharger
    • 'last but not least', comment créer un istream à partir d'un tableau ? La seule solution que je connaisse est dériver stringbuf en Stringbuf (par exemple ; on peut aussi dériver basic_streambuf mais c'est plus compliqué) pour initialiser le tampon avec le tableau, puis initialiser un istream avec Stringbuf. J'ai proposé le code dans ce forum, mais je trouve que ce n'est pas très pratique. Si quelqu'un a mieux...

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Par défaut
    Si quelqu'un a mieux...
    J'ai mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     vector<float> v;
     
     /* ... */ // initialisation de v
     
     stringbuf sb(ios_base::in | ios_base::out | ios_base::binary);
     iostream io(&sb);
     io.write((char *)&v[0],v.size()*sizeof(float));
     
     // le flux io est prêt pour la lecture avec read()

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 117
    Par défaut
    Ben je veux bien envoyer le tableau directement mais tu fais comment ? Ou alors dans ce cas tu transforme ton tableau en une chaine de caractères ...

    Ce que je voudrais moi c'est l'envoyer en binaire ...

    Boromir73 : Je suppose que ton code marche aussi avec un tableau au lieu d'un vector en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    float tab[SIZE];
     
     /* ... */ // initialisation de tab
     
     stringbuf sb(ios_base::in | ios_base::out | ios_base::binary);
     iostream io(&sb);
     io.write((char *)&tab[0],SIZE*sizeof(float));

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Par défaut
    Je ne saisis pas bien ce que tu veux dire par "envoyer en binaire" :
    1 float (32bits) => 4 octets ?
    1 float (32bits) => 32 octets ?

    Quelle syntaxe utilises-tu pour l'instant avec ton socket ?

    Et oui, le code que je propose devrait marcher avec un tableau (mais ça fait 1 float (32bits) => 4 octets).

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 117
    Par défaut
    Oui c'est envoyer 4 octexct que je veux.

    En gros je veux lire un float en lisant un bloc de taille sizeof(float)

    Mai sje ne veux pas lire une séquence de 1 et de 0 à la main ...

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

Discussions similaires

  1. Créer un flux RSS
    Par okoweb dans le forum Langage
    Réponses: 16
    Dernier message: 26/10/2011, 12h55
  2. Créer un flux XML dans un dataHandler
    Par flethiel dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 25/09/2007, 12h03
  3. [FLASH MX2004] Créer un flux xml
    Par j0hnmerrick dans le forum Flash
    Réponses: 3
    Dernier message: 23/02/2005, 12h02
  4. [DOM] Comment créer des flux XML en java ?
    Par nean_j dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 27/04/2004, 12h00

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