Decomposition de buffer

Résolu
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 - 12 juin 2007 à 11:37
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 - 14 juin 2007 à 11:49
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

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
13 juin 2007 à 16:36
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++ (@++)
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 08:11
je n'ai pas très bien compris ton énoncé.

Loki
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
14 juin 2007 à 09:28
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?

 
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 09:39
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
14 juin 2007 à 10:37
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 !

 
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 10:49
tiens moi au courant de l'avancée du truc.

Loki
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 10:51
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.
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
14 juin 2007 à 11:12
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 ...

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

Loki
0
LaTatadu91 Messages postés 968 Date d'inscription jeudi 20 mai 2004 Statut Membre Dernière intervention 26 avril 2013 1
14 juin 2007 à 11:37
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

 
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 11:49
pas mal le jeu de mot

Loki
0
Rejoignez-nous