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 :

Concaténer variable binaire


Sujet :

C++

  1. #1
    Membre averti
    Avatar de onet
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2002
    Messages : 365
    Points : 344
    Points
    344
    Par défaut Concaténer variable binaire
    Hello,

    J'ai une petite question. Je dois envoyer une trame en UDP. Pour encode le message a envoyer, j'utilise google buffers. Celui-ci me fournis une variable binaire lorsque je sérialize mon objet.

    le souci, c'est qu'avant de l'envoyer sur le réseau, je dois lui rajouter 5 bytes:
    - 1 byte étant un id
    - 4 byte étant un checksum

    la question est... Comment j'ajoute ces données a ma variable ?

    Pour résumer, après sérialisation, j'ai (X, Y et Z étant des bytes):

    ma_var = XXXXX

    et j'aimerais avoir:

    ma_var = ZYYYYXXXXX

    Merci!
    Onet
    ---
    Retrouvez tout mes tutos et mes articles: http://www.olivierlange.com

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2006
    Messages : 507
    Points : 704
    Points
    704
    Par défaut
    Bonjour,

    J'ai bien une solution à te donner mais ne suis pas certain qu'elle plaise aux plus puristes des développeurs C++...
    En gros c'est une solution C (et donc fonctionnera en C++)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    char id;
    char checksum[4];
    TypeVariableGoogle variable_google; // Variable retournée par Google
    // [...]
    char* trame_udp = malloc (sizeof (variable_google) + 5);
    memcpy (trame_udp, &id, 1);
    memcpy (trame_udp+1, checksum, 4);
    memcpy (trame_udp+5, variable_google, sizeof (variable_google));
    Ce serait en gros quelque chose comme ça... (avec les contrôles de retours nécessaires etc...)

    Par contre, en C++ "trame_udp+5" risque de ne pas fonctionner... il faut remplacer par quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    memcpy (&trame_udp[1], checksum, 4);
    memcpy (&trame_udp[5], variable_google, sizeof (variable_google));
    NB: Le code est approximatif au niveau des types des variables, et est bien sûr à adapter à ton cas particulier...

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Pas trop le choix si tu dois rajouter des octets à un paquet UDP que de réallouer un buffer. new plutôt que malloc ou même encore mieux std::vector. Et unsigned char plutôt que char :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    std::vector<unsigned char> trame_udp;
    trame_udp.reserve(taille_google+5);
    trame_udp.push_back(Z);
    trame_udp.push_back(Y);
    trame_udp.push_back(Y);
    trame_udp.push_back(Y);
    trame_udp.push_back(Y);
    std::copy(
      google_buffer,
      google_buffer + taille_google
      std::back_inserter(trame_udp)
    );
    send_udp_datagram(&trame_udp[0],trame_udp.size());

Discussions similaires

  1. decoder une variable binaire
    Par Matmal11 dans le forum Modules
    Réponses: 5
    Dernier message: 19/12/2006, 09h12
  2. concaténation variables de type std::bitset<>
    Par sanatou dans le forum SL & STL
    Réponses: 3
    Dernier message: 09/11/2006, 22h55
  3. Comment déclarer une variable binaire?
    Par Pragmateek dans le forum C++
    Réponses: 12
    Dernier message: 22/03/2006, 17h35
  4. [MySQL] Problème concaténation variables
    Par renaud26 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 19/03/2006, 17h33
  5. [Tableaux] problème syntaxe concaténation variable
    Par mussara dans le forum Langage
    Réponses: 3
    Dernier message: 01/03/2006, 11h24

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