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 :

envoyer une trame en hex


Sujet :

C++

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 23
    Par défaut envoyer une trame en hex
    bonjour , j'ai une petite problème concernant l'envoie dune trame en hex , comme vous voyez dans le code buf contient dans ce cas buf[0]='\x1' et buf[1]='\x0' mais quand je l'envoie je trouve pas le buf[1] je pense parce qu'il trouve le 0 , même chose si je le convertir en string il s’arrête a '\0' (end of string) .
    dans mon code je veut envoyer ce buf de fois donc je trouve juste le '\x1' répéter deux fois fois.
    merci d'avance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    union IntByte
    	{
    		uint32_t i;
    		uint8_t b[2];
    	};
     
    int PC=1;
    	string data_frame;
    	stringstream msg;
    	uint8_t tab[2]  ;
     
     
    	unsigned char buf1[2];
     
    	IntByte ib;
     
    	memset(tab, 0, 2 * sizeof(uint8_t));
    	ib.i = PC;
    	for (int i = 0; i < 2; ++i)
    {
    cout<< std::hex << (uint32_t)ib.b[i] << std::endl;
    buf1[i] = ib.b[i];
    }
    msg << '\x06' << '\x22' << buf1 << buf1;
    data_frame = calcule_crc((uint8_t*)msg.str().c_str(), 8);
    	{

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,

    Fait attention au fait que buf1 est déclaré comme étant un unsigned char buf1[2];, ce qui fait que c'est l'adresse de buf1[0] qui est envoyée dans ta variable msg, et non les valeurs des deux éléments.

    Pour corriger ton problème, modifie ton <<buf1 <<buf1 en <<buf1[0]<<buf1[1], et le tour sera joué
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 23
    Par défaut
    oui je sais j'ai déja fait cette sol mais mon problème c'est que il y'a d'autre trame ou ce buf1 et de taille 129 donc on peut pas écrire msg<<buf1[0]<<buf1[1]<<buf1[4]<<buf1[3]..........<<buf1[127]<<buf1[128]
    j’espère que c'est plus claire maintenant
    je veut tester maintenant si je met mon msg dans le boucle for de cette façon


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    union IntByte
    	{
    		uint32_t i;
    		uint8_t b[2];
    	};
     
    int PC=1;
    	string data_frame;
    	stringstream msg;
     
    	unsigned char buf1[2];
     
    	IntByte ib;
     
    	memset(tab, 0, 2 * sizeof(uint8_t));
    	ib.i = PC;
    msg << '\x06' << '\x22' ;
    	for (int i = 0; i < 2; ++i)
    {
    cout<< std::hex << (uint32_t)ib.b[i] << std::endl;
    buf1[i] = ib.b[i];
    msg<<buf1[i];
    }
     
    data_frame = calcule_crc((uint8_t*)msg.str().c_str(), 8);

  4. #4
    Membre Expert
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Par défaut
    Citation Envoyé par Mn said Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    union IntByte
    {
    	uint32_t i;
    	uint8_t b[2];
    };
    Et les deux autres octets ?

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 23
    Par défaut
    quel deux octets ?

  6. #6
    Membre Expert
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Par défaut
    i fait 4 octets ; b n'est fait que 2. Tu as donc deux octets (poids faible probablement) de i qui ne sont pas accessible depuis b.

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

Discussions similaires

  1. Envoyer une trame ApdComPort1
    Par Invité(e) dans le forum Composants VCL
    Réponses: 2
    Dernier message: 05/05/2008, 17h24
  2. Envoyer une trame "brut"
    Par Snooker9 dans le forum Réseau
    Réponses: 2
    Dernier message: 25/02/2008, 10h26
  3. Envoyer une trame sur port USB
    Par Bocci dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 15/03/2007, 21h07
  4. [USB]envoyer une trame sur le port USB
    Par ced38100 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 03/11/2005, 12h54
  5. [Réseau] Envoyer une trame tcp
    Par heid dans le forum Web & réseau
    Réponses: 5
    Dernier message: 18/07/2005, 13h07

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