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 :

Manipulation de caractères


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 93
    Points : 63
    Points
    63
    Par défaut Manipulation de caractères
    Bonjour,

    Je suis en train de développez une dll pour une sonde communiquant sur le port série. J'utilise la bibliothèque Windows pour la communication sur le port série.
    Cette partie fonctionne bien puisque j'ai vérifié avec Portmon(espion du port série) et j'ai bien les trames voulus qui circulent sur le port série.
    Mon problème est au moment de récupérer les infos sur le port série pour les traiter.
    Lorsqu’on lit sur le port série avec la bibliothèque Windows, celle-ci nous renvois un char*.
    Voilà un exemple de ce que je reçois(hexa, lu avec portmon) :

    55 AA 70 01 01 08 00 00 00 13 00 8D

    Le problème c'est que lorsque je j'arrive au premier "00", soit caractère nul ou \0, mon char* détecte une fin de chaine et donc coupe le mot(du moins c'est ce que je pense avoir compris).

    Comment faire pour récupérer la chaine en entier ?
    J'aimerais par la suite (je débute en c++ ) pouvoir par exemple récupérer l'octet "70" et l'afficher sous sa forme numérique car si j'affiche le caractère "70" il va m'afficher "p" puisque je récupère l'équivalent de la chaine hexadécimal sous forme de caractères.

    Merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    734
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 734
    Points : 1 475
    Points
    1 475
    Par défaut
    Bon, si je devine bien ces "caractères" sont en réalité des données chiffrées (que mesure ta sonde?).
    Qu'entends tu par "coupe le mot"? Le char* n'est pas un objet chaîne de caractères à proprement parler, juste un pointeur sur un buffer, il ne "détecte" rien.
    Une char*est interprété comme un pointeur sur le début d'une chaîne de caractères...si tu le passes à une fonction de traitement de caractères "C-style". Là je ne connais pas l'API en question, car je ne programme pas sous Windows, mais que dit ta documentation sur la sortie?
    De deux choses l'une:
    * soit c'est vraiement une chaine de caractères terminée par un 0 => dans ce cas tu dois pouvoir interroger la lib jusqu'à avoir toute la trame, et vérifier que tu as bien eu toute la trame
    * soit c'est juste l'affichage qui s'arrête à 0 (vu que tu lui demandes d'afficher le char* comme une chaîne de caractères), mais en réalité tu as toutes les données dans le buffer retourné, et la fin de trame est marquée autrement (longeur fixée? autre caractère terminateur? là ça dépend de l'API)
    A mon avis c'est le second problème que tu as.

  3. #3
    Membre habitué Avatar de nowahn
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 84
    Points : 150
    Points
    150
    Par défaut
    Bonjour,

    En fait, ce n’est pas le langage C++ qui traite un char* comme une chaîne de caractères terminée par '\0', ce sont les fonctions de chaîne de la bibliothèque C (strlen, strcpy, …). Pour le reste du langage, un char* est simplement un pointeur vers un char, comme un int* est un pointeur vers un int.
    Pour récupérer toute tes valeurs, tu dois ne pas passer par les fonctions C de traitement des chaînes. Tu dois notamment avoir un moyen de connaître la taille du tableau de char (Si c’est toujours 12 comme sur ton exemple, ou si la fonction qui te fournit le tableau te fournit aussi sa taille, une boucle for permet de lire toutes les valeurs du tableau).
    Pour afficher les valeurs numériques, il suffit de convertir les char en int:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(int Index=0; Index<12; ++Index)
       std::cout << int(tableau[Index]) << '\n';

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 93
    Points : 63
    Points
    63
    Par défaut
    Merci nowahn, c'est parfait comme réponse...
    C'est à peu près ce que j'avais compris !

    Merci

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

Discussions similaires

  1. Comment manipuler les caractères japonais
    Par cmoijulien dans le forum Windows Forms
    Réponses: 6
    Dernier message: 01/07/2007, 14h14
  2. Réponses: 16
    Dernier message: 30/01/2007, 00h20
  3. Manipulation de caractères
    Par Death83 dans le forum C++
    Réponses: 4
    Dernier message: 18/12/2006, 07h58
  4. [VB]manipulation des caractères d'un string
    Par lacsap49 dans le forum VB.NET
    Réponses: 5
    Dernier message: 16/06/2006, 18h43
  5. Aide sur une fonction / pbm de manipulation de caractère
    Par captainamerica75 dans le forum Access
    Réponses: 3
    Dernier message: 16/02/2006, 11h54

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