Gestion de chaine de caractère

ABouras Messages postés 26 Statut Membre -  
totof31 Messages postés 165 Statut Membre -
Bonjour,

je cherche à stocker dans un tableau "message" une chaîne de caractères envoyé régulièrement par un GPS par protocole XBee et reçu sur une clé USB XStick (Port série).

Le message est le suivant :
Heading: 274 Tilt: 7 Roll: -11 
LAT=48.715961 LON=2.203730 SAT=5 PREC=300 
CHARS=32386 SENTENCES=275 CSUM ERR=1


Je reçois de manière régulière ces messages, et j'aimerai stocker à chaque fois que j'appelle ma fonction de lecture, un seul de ces messages avec le bon ordre des caractères évidemment.

Il faudrait donc que je puisse repérer le début du message ("Head" par exemple avec la fonction "strstr"), puis que je stock les caractères dans le tableau "message[]" jusqu'à ce que j'arrive à la fin du message. Une fois que j'ai récupérer le premier message, j'efface le tableau puis je recommence avec le message suivant et ainsi de suite ...

Pour l'instant, j'arrive à stocker un nombre N de caractère (genre N=110) dans le tableau data[]. Mais quand je lance ma fonction, il stock N caractère dans data[] mais il commence au mauvais caractère, par exemple j'affiche :
oll: 0 
LAT=83330.00LON=LAT=83330.00LON=0.00 SAT=0 PREC=500 
Heading: 54 Tilt: -47 Roll: 0 
LAT=83330.00LON=He


Pouvez-vous m'aider svp ?

Merci d'avance !

3 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    en C ?
    0
  2. ABouras Messages postés 26 Statut Membre
     
    Bonjour, oui mon programme est en C et sur LINUX !
    0
  3. totof31 Messages postés 165 Statut Membre 74
     
    Un truc du genre :
    char * ptr;
    
    // Recherche du début
    do {
      ptr = NULL;
      lire data, nb_data
      if (nb_data>0)
      {
        data[nb_data] = 0;
        ptr = strstr (data, "Head");
        if (ptr != NULL) printf("%s", ptr);
      }
    } while (ptr == NULL);
    
    // On a trouvé le début
    
    do {
      lire data, nb_data
      if (nb_data>0)
      {
        data[nb_data] = 0;
        printf("%s", data);
      }
    } while (1);


    Ce n'est pas parfait car tu peux recevoir un paquet avec seulement un bout de "Head". A améliorer...
    0