2016-05-11 17 views
0

...区切り文字が本文に含まれる場合があります。固定長文字列を区切り文字で解析します。

STX(1バイト)+ IDT(1バイト)+タイプ(1バイト)+ CMD(3バイト)+ [バリュー/応答(:私は以下のフォーマットを使用するプロトコルを有するLCDディスプレイで働い

ETX(1byte)] + ETX(1byte)

STXは0x07、ETXは0x08です。ディスプレイから出てくるIDTも0x08になる可能性があり、ディスプレイからの応答を解析しようとすると問題が発生します。私は解析ルーチンを書いていませんでしたが、今は動作させることを任されています。

元のプログラマーの解答はhttps://gyazo.com/1fc74133e7109e5aa213f3f5878cc001にあります。問題は、IDTが0x08の場合、0x08がIDTとETXであるため、コードは応答の最初の2バイトを取得するだけです。私はLastIndexOfの使用について考えましたが、バッファ内のディスプレイからの複数の応答が存在する可能性があります。どんな助けもありがとうございます。

+0

すべての応答が正確に8バイトになるのですか? –

+0

はい、私はプロトコル文書を正しく読んでいます。 – Minesguy82

答えて

1

ディスプレイからのすべての応答に記述した8バイトが含まれている場合は、IndexOfを使用してETXターミネータを見つける必要はありません。

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 
     } 
    } 
}