Gestion de chaine de caractère

ABouras Messages postés 26 Date d'inscription   Statut Membre Dernière intervention   -  
totof31 Messages postés 163 Date d'inscription   Statut Membre Dernière intervention   -
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 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
en C ?
0
ABouras Messages postés 26 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour, oui mon programme est en C et sur LINUX !
0
totof31 Messages postés 163 Date d'inscription   Statut Membre Dernière intervention   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