Decomposition de buffer

Résolu
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
-
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
-
salut,

j'aimerais de l'aide ou sinon au moins des précisions si possible sur un petit bout de code SVP.

Voila mon pb : je recupére une trame dans un buffer défini ainsi BYTE buffer[4000];
ma trame est composée comme ceci : STX-DATA-ETX (en tres gros)
STX et ETX sont de l'hexa correspondant a 0x02 et 0x03 respectivement.
mes données sont une suite de caractére a decomposer aussi on va dire 5caractere pour le nom suivi de 10 pr le prenom (pr exemple)

voila je ne sais pas trop comment decomposer ma trame et retirer les STX ETX et ensuite decomposer ma chaine de caracteres qui est en hexa
pr les stocker dans des variables comme cela: char prenom [10]; char nom[5];

si mon buffer originel était une chaine de caractere j'aurais pu faire : strncpy_s( nom, buffer , 5);
mais comme la mon buffer est une suite d'octets je ne sais pas comment faire l'equivalent ...

pourriez vous m'aider ou du moins me guider SVP ! merci d'avance.

 

51 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
Bon la je ne peux pas suivre tout les messages donc je ne sais pas si ça a déjà été proposé.
D'après ton problème, ce que tu veux faire c'est récupérer le premier octet, ensuite le prénom et nom puis finalement le dernier octet. J'espère que le nom et prénom stocké inclue le 0 de fin de chaine
Donc c'est simple.
1. Tu récupère le premier octet
2. Tu cherche le premier 0 de fin de chaine en même temps que de remplir ton tableau prénom avec les lettres que tu tests.
3. Tu cherche le second 0 de fin de chaine en même temps que de remplir le tableau nom avec les lettre testées.
4. Tu récupère le dernier octet

En gros, ça devrait donner ça comme algo

récupère première valeur de buffer dans variable
tant que caractère testé n'est pas nul
    récupère valeur testée dans prenom
    incrémentation de buffer
    incrémentation de prenom
fin de boucle
ajout du 0 de fin de chaine dans prénom
incrémentation de buffer
tant que caractère testé n'est pas nul
    récupère valeur testée dans nom
    incrémentation de buffer
    incrémentation de nom
fin boucle
ajout du 0 de fin de chaine dans nom
récupère valeur courante de buffer dans variable

En code

BYTE STX, ETX;
char prenom[32], nom[32];char *c (char*)buffer, *d prenom;

STX = *c;
while(*++c) *d++ = *c;*d 0; d nom;
while(*++c) *d++ = *c;
*d = 0;
ETX = *++c;

Voilà, j'espère que c'est ce que tu recherches à faire.

C++ (@++)
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
je n'ai pas très bien compris ton énoncé.

Loki
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
ben je suis en posession de 2 documents
1 qui explique la communication rs232 avec le protocole utilisé pr la com.
donc celui ou on parle de STX-DATA- ETX
et un autre document ou on parle plus des messages envoyé: c'est a dire de DATA spécifiquement
je peux recevoir plusieurs types de messages:
ils sont composés ainsi :
message 1:
    id message 2caracteres (10)
    position   2caracteres ( 56 ou 57)  
    .............

message 2
    id message 2caracteres (11)
    sens 1 caractere (1 ou 0)
    .........
donc si les 2premiers caracteres sont 10 ben je suis dans le message 1,si c'est 11 c le message 2 etc...
ce qui me donne le nombre de caracteres a decomposer pr chacun!

le truc c'est que dans la premiere partie (Decomposition STX-ETX) on est parti sur un octet par valeur
et la pr la decomposition de DATA on se retrouve avec le type de message (10,11,..) codé sur 2 caracteres donc 2octets ...
ca me semble incohérent,non?

 
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
tu penses que 10 ou 11 sont des caractères codés ? c'est à dire : STX | '1' | '0' | ... | ETX et pas STX | 10 | ... | ETX

ma convention d'écriture est :

10 : valeur de l'octet
'1' : caractère UN codé. dans notre cas sur un octet donc : valeur de l'octet : 49 (ANSI, MBCS)

c'est vraiment gênant que ça soit des caractères codés ?

Loki
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
non c'est pas génant c'est juste que du coup on sy perd un coup on fonctionne en valeur de l'octet et ensuite en caractere codé
enfin le pb c'est que je n'en suis meme pas sur LOL
bref je voulais juste ton avis mais a priori que ca soit l'un ou l'autre j'ai toutes les billes pr que ca marche maintenant ;-)

Thanks to you !

 
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
tiens moi au courant de l'avancée du truc.

Loki
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
en fait ce que tu peux faire pour le savoir c'est de faire un petit prog qui récupère ces trames et tu regardes en debug le contenu octet par octet. tu sauras vite si tu bosses en caractère codés ou pas.
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
ouais c'est la le probleme
1/ la machine qui doit m'envoyer ces trames n'est pas dispo LOL donc je travaille sans filet(pas de tests possibles ni de récupération de trames...)
2/ mon pc de dev. n'a mm pas de port série ...

 
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
difficile d'etre un bon travailleur avec de mauvais outils parle en à ton patron :p

Loki
Messages postés
968
Date d'inscription
jeudi 20 mai 2004
Statut
Membre
Dernière intervention
26 avril 2013
1
lol non mais c prevu que j'aille qlq jours sur site ... ca sera soit du plug and play (si je suis bon et toi de bon conseils)
soit du plug and pray LOL

 
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
pas mal le jeu de mot

Loki