J'ai réalisé un petit programme qui traite des trames reçu sur un port serie pour en extraire les données importantes !

J'arrive à traiter toutes les trames une par une mais j'ai un problème sur la longueur des trames quand je veut les traiter en une fois.

Exemple des trames que je traite

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$GPRMC,123943.000,A,5022.6010,N,00304.2600,E,0.00,334.30,160112,,,A*68
$IIMWV,191.0,R,003.60,N,A
$IIVHW,,,,,1.3,N,,*2b
Donc on voit que les trames ne font pas toutes la même taille (par exemple la première 64, la troisième 21,...) si la trame est trop longue ou trop courte par rapport à la taille que j'indique dans mon code le programme plante !

Ma méthode pour récupérer ma trame :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
bool WM918::RecupData()
{
        bool RecupOk=false;
        const int TAILLETRAME=21;
        DWORD NbCar=0;
        int Compteur=0;
        AnsiString Trame;
        TrameBrute="";
 
        LExtract->OuvrirPort(Erreur);
        do
        {
                Trame ="";
                bool BufReaded = LExtract->ReadBuffer(Trame,Erreur);
                NbCar = Trame.Length();
 
                if(NbCar>0)
                {
                        RecupOk=true;
                        Compteur=Compteur+NbCar;
                        TrameBrute=TrameBrute+Trame;
                }
        }
        while(Compteur<TAILLETRAME);
 
        LExtract->FermerPort(Erreur);
 
        cout<<"Trame analyse : \n"<<TrameBrute.c_str()<<endl;
        return RecupOk;
}
Je ne trouve pas de solution à comment faire pour avoir la bonne taille de chaque, car si je n'indique pas de taille il n'y a pas de fin et si je met la mauvaise ça plante !

Merci d'avance pour votre aide