2016-05-11 3 views
0

... où le délimiteur pourrait également se trouver dans le corps.Analyse d'une chaîne de longueur fixe avec un délimiteur

Je travaille avec un écran LCD qui a un protocole qui utilise le format ci-dessous:

STX (1 byte) + IDT (1 byte) + Type (1 byte) + CMD (3bytes) + [Valeur/réponse (1 octet)] + ETX (1byte)

STX est 0x07 et ETX est 0x08. L'IDT provenant de l'affichage peut également être 0x08, ce qui me cause des problèmes lorsque j'essaie d'analyser la réponse de l'affichage. Je n'ai pas écrit la routine d'analyse, mais je suis maintenant chargé de faire fonctionner les choses.

La solution du programmeur d'origine peut être vue à https://gyazo.com/1fc74133e7109e5aa213f3f5878cc001. Le problème est que lorsque IDT est 0x08, le code saisit simplement les 2 premiers octets dans la réponse parce que 0x08 est l'ETX ainsi que l'IDT. J'ai pensé à utiliser LastIndexOf, mais la possibilité existe qu'il y ait plus d'une réponse de l'affichage dans le tampon. Toute aide est appréciée.

+0

Est-ce que chaque réponse sera exactement 8 octets? –

+0

Oui, si je lis correctement le protocole. – Minesguy82

Répondre

1

Si chaque réponse de l'affichage contient les 8 octets que vous avez décrits, il n'est pas nécessaire d'utiliser IndexOf pour trouver le terminateur ETX. Vous pourriez faire quelque chose comme ceci:

internal override void processRXBuffer() 
{ 
    for (int index = 0; (index + 8) <= RXData.Length; index += 8) 
    { 
     string pCmd= RXData.Substring(index, 8); 
     if ((pCmd[0] == '\x07') && (pCmd[7] == '\x08')) 
     { 
      // Looks like we have a valid response so process it 
     } 
    } 
}