begin process at 2010 02 09 23:28:16
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Divers

 > 

decomposition de buffer


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

decomposition de buffer

mardi 12 juin 2007 à 11:37:39 | decomposition de buffer

LaTatadu91

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.


 

mardi 12 juin 2007 à 13:26:39 | Re : decomposition de buffer

LaTatadu91

heu...dois je comprendre par le manque de reponses que mon sujet n'est aps clair ou juste que personne en sait trop repondre ?


 

mardi 12 juin 2007 à 14:25:10 | Re : decomposition de buffer

Neo_Fr

Membre Club
essaye :

void * memcpy ( void * destination, const void * source, size_t num );

Neo_Fr





mardi 12 juin 2007 à 15:02:16 | Re : decomposition de buffer

LaTatadu91

oki merci , je vais essayer des que possible et je valide al réponse si ca passe bien !!!

 

mardi 12 juin 2007 à 20:33:20 | Re : decomposition de buffer

KeniiyK

Membre Club
tu bosse avec du serie RS232 ?

Solution possible (que je n'aime pas, en C++ avec un parser c'est plus joli) :

char prenom [11]; char nom[6];
BYTE buffer[4000];

// buffer+1 pour skipper le STX
memcpy(nom, buffer+1, 5);
nom[5] = '\0';

// buffer+6 pour skipper le STX plus le nom
memcpy(prenom , buffer+6, 10);
prenom [10] = '\0';

:D
mercredi 13 juin 2007 à 09:34:03 | Re : decomposition de buffer

Loki6

Membre Club
salut,

le problème Keniiyk c'est que 5 et 10 lettres étaient des exemples. je suppose que ça doit être variable.

LaTatadu91 > il faut savoir qu'un char est codé sur un octet exactement comme un BYTE.
ensuite, ta chaine n'est ni en hexa ni en décimal ni en cacahuètes, c'est une liste de bits à 0 ou 1. après tu la lis comme tu veux.
buffer[0] est STX que tu peux stocker dans un char si besoin, de même que ETX (je ne sais pas s'il est forcément à l'adresse buffer[3999] ou bien si le texte fait par exemple 20 caractères, le ETX est à buffer[20], à vérifier donc)
pour le reste tu peux faire une copie avec strcpy.


Loki
mercredi 13 juin 2007 à 09:41:06 | Re : decomposition de buffer

Loki6

Membre Club
pour ce qui est de trier les différents champs de la partie DATA, tu as deux possibilités :

    - soit pour chaque champ il n'y a qu'un seul mot, dans ce cas c'est simple : tu te places au début à buffer[1] tu récupères le mot avec sscanf(), ensuite tu dégages jusqu'au prochain espace avec strstr() etc... pour chaque champ.

    - soit tu peux avoir des noms comme (Jean-Baptiste) "de la fraise tagada". à ce moment là c'est plus ch****. il faudrait que tu aies un caractère spécial comme ';' dont tu te sers pour séparer tes champs, encore faut-il pouvoir les insérer à la création de la trame...
si tu peux, alors il faut lire chaque caractère et non plus des mots (car sscanf termine la lecture d'une chaine à chaque espace rencontré), jusqu'à tomber sur ';'.

voilà j'espère que ça répond à tes questions.

Loki
mercredi 13 juin 2007 à 10:08:17 | Re : decomposition de buffer

LaTatadu91

en fait mon buffer de données sera toujours composé ainsi : STX-DATA-ETX ce qui n'est pas fixe c'est : la partie DATA.
Mais les 2 premiers caracteres de DATA m'indiqueront quel type de données je dois decomposer!
ainsi suivant le type de données je peux decomposer DATA avec pr mon exmple : 5caracteres pr le nom et 10 pr le prenom...
par contre je peux aussi avoir d'autre types de messages : ENQ et ACK donc
1/ je dois definir quel type de message m'arrive avec le premier octet de ma trame (ENQ,ACK,STX)
2/suivant le type de message je dois agir :
                         - Si c'est ENQ --> envoi d'un ACK
                         - Si c'est STX --> decomposition de DATA dans mes variables (memcpy)....

donc la solution de keniiyk me semble pas mal , car effectivement pr chaque chaine de caractere de DATA je sais de combien de caractere elle se compose.

il me reste juste a identifier les types ENQ ,STX ...

en faisant cela alors :
memcpy(MsgTyp, buffer, 1);
if (strcmp(MsgTyp,STX) ==0)
....
if (strcmp(MsgTyp,ENQ) ==0)
....

en declarant STX et ENQ comme ceci :
char  STX  =  0x02;           // start transmission marker
char  ETX  =  0x03;           // end transmission marker
char     ACK  =  0x06;                // Acquittement du message
char     ENQ  =  0x05;           // Enquiry

ca vous parait correct ?

en tout cas merci pr votre aide!!!

 

mercredi 13 juin 2007 à 10:18:58 | Re : decomposition de buffer

Loki6

Membre Club
ah ok, j'avais pas vu ça comme ça. dans ce cas en effet.

y a t'il une différence entre memcpy(MsgTyp, buffer, 1); et MsgTyp = buffer[0] ?
de même qu'entre strcmp(MsgTyp,STX) ==0 et MsgType == STX ?

Loki
mercredi 13 juin 2007 à 10:23:03 | Re : decomposition de buffer

LaTatadu91

ben a priori a toi de me le dire ...
moi j'aurai tendance a utiliser les memcpy et strcmp mais si tu me dis que c'est equivalent ben oki...
donc ma declaration des STX etc... c'est bon?


 


1 2 3 4 5 6

Cette discussion est classée dans : buffer, trame, stx, etx, decomposer


Répondre à ce message

Sujets en rapport avec ce message

projet ETX/STX [ par funkay ] quelqu'un connait se protocole réseaux ????Si oui comment l'utiliser en c++ pour communiquer sur le port série entre deux PCMerci d'anvance !!!!!!!! probléme de lecture d une trame [ par dgac ] Bonjour,j'ai crée un programme pouvant effectuer l nevoie d une trame et la reception . mais dans ma fonction lecture je reste bloqué a mon instructio Gestion du RTS [ par apoplus ] Bonjour,Je développe une dll de gestion de port série en C++ sous VS2005.Actuellement je suis bloqué avec le signal RTS.Je veux mettre RTS au niveau h chat client server [ par electroonn ] Bonjour, j'essaye de developper avec c++ une application de chat (client-server) sous windows, en voici le code:Server server; Client client; void m Besoin d'aide programme c++ [ par Nemesis007 ] Bonsoir à tous ! Voila, je fais appel à votre aide car j'ai un gros problème pour mon programme mais tout d'abord, je vais vous définir le but de ce p la gravure multisession [ par mniajnaa ] SOS SOS SOS SOS SOS ....... salut tout le monde  le probleme  je vais vous le decrire d'une maniere succincte j'ai une application qui perm Fonctionnement d'un navigateur [ par Space_Monkey ] Bonjour,Mon but serait de faire visiter une page à mon programme, de manière completement transparente.(Inutile de me sortir ShellExecute();)Je peux d PB avec libpng : png en niveau de gris sur 16 bits [ par ReDcRoWn ] Bonjour à tous,A l'aide de la libpng je cherche à écrire des images au format PNG en niveau de gris sur 16 bits (pas de transparence).1/ Je voudrais t Requetes serveur cs 1.6 [ par Mini92 ] En fait, j'essaye d'envoyer des requêtes sur mon serveur cs mais je n'obtiens aucun retour.Voilà le code si quelqu'un peu m'aider svp#include #include Z-Buffer fait des siennes [ par bizzard4 ] J'ai un problème avec mon Z-Buffer. Il affiche très bien la partie droite et le dessous de mes cubes. Mais quand il est temps d'afficher le côté gauch


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,359 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales