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 !
A voir également:

3 réponses

dubcek Messages postés 19021 Statut Contributeur 5 637
 
hello
en C ?
0
ABouras Messages postés 26 Statut Membre
 
Bonjour, oui mon programme est en C et sur LINUX !
0
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