|
Bas de page | |
---|---|
Auteur | Sujet : [C] Traitement d'une trame GPS |
Publicité | Posté le 16-03-2011 à 22:36:22 |
Titsushi | Up, personne ? |
Elmoricq Modérateur | Sur quelle partie bloques-tu ? Manipulation des chaînes, conversions, autres ? |
Titsushi | Sur l'extraction de chacune de mes sous-chaînes correspondant aux données voulues, et de leur décomposition ensuite en "morceaux" de chaîne à convertir en int. |
Titsushi | Je comprends pas le dernier argument de snprintf. Je suis bien en C, pas en C++... |
Elmoricq Modérateur | C'est bien du C. C'est une opération sur pointeur, l'adresse d'un char* débutant au premier caractère, et sizeof(char) valant toujours 1, si tu fais (adresse + n) tu pointes sur le n-ième caractère de la chaîne. Message édité par Elmoricq le 17-03-2011 à 18:41:15 |
Titsushi | J'ai essayé de faire un exemple, en créant moi-même un chaîne de caractères comme si elle venait du GPS, et je n'obtiens rien à l'écran.. #include <stdlib.h>
int main(void) return 0; void process_gps_buffer_heure(unsigned char *buffer) } Message édité par Titsushi le 17-03-2011 à 19:10:22 |
Elmoricq Modérateur | Comme tu parlais de conversion en int, je pensais que tu recevais des chaînes de caractères, du genre :
|
Titsushi | La trame GPS est sous forme d'une suite de caractères reçus via liaison série RS232 par un micro contrôleur, et que je range un à un dans une chaîne de caractères, que j'appelle buffer ici.
|
Publicité | Posté le 17-03-2011 à 21:14:21 |
Elmoricq Modérateur | Fondamentalement, il n'y en a pas. Un caractère dispose d'un identifiant auquel correspond, selon la table d'encodage utilisée, une représentation graphique. En ASCII : De plus, un "char" en C contient simplement une valeur numérique encodée sur 1 byte (= 8 bits sur nos ordinateurs modernes). Donc allant de -128 à 127 (0 à +255 en unsigned). Par exemple :
Est équivalent à :
Et tout aussi équivalent à :
Et donc, pour en revenir à tes trames GPS : il te faut analyser si les nombres que tu reçois correspondent des caractères, auquel cas il faut les traiter comme des "chaînes" et les convertir (par exemple : tu reçois 52 puis 50, tu les traduis ce qui te donne '4' puis '2' puis, après conversion, le nombre 42), soit ce sont directement des nombres exploitables tels quels (par exemple, tu reçois directement 42, qui vaut tout bêtement 42, et non le caractère '*'). Message édité par Elmoricq le 17-03-2011 à 21:55:00 |
Titsushi | Oui oui c'est bien le 2nd cas que tu évoques concernant la trame..
|
Elmoricq Modérateur | Si tu reçois réellement "$GPGGA153019" (et donc la suite numérique : 36, 71, 80, 71, 71, 65, 49, 53, 51, 48, 49, 57), alors mon bout de code au tout début fonctionne.
|
Titsushi | Un immense merci ! Ça marche parfaitement.
|
Sujets relatifs | |
---|---|
Programmation Java/C sous Linux/Windows^^ | Application ASP.NET MVC (C#) - Routing/URL |
[C] Typedef et #include | Problème NetworkStream C# |
Petit traitement de texte personalisé | [ C#] Initialisation attribut |
C++ FILE SOURCE NOT COMPILED | lien api windows en langage C |
[C#.NET] expressions régulières | [Batch] Rechercher des fichiers dans C: |
Plus de sujets relatifs à : [C] Traitement d'une trame GPS |