......分隔符也可能在体内。
我正在使用具有使用以下格式的协议的LCD显示器:
STX(1byte)+ IDT(1byte)+ Type(1byte)+ CMD(3bytes)+ [Value / Reply(1byte)] + ETX(1byte)
STX为0x07,ETX为0x08。来自显示器的IDT也可能是0x08,这在尝试解析显示器的响应时会引起问题。我没有编写解析例程,但现在我的任务是使事情有效。
原始程序员的解决方案可以在https://gyazo.com/1fc74133e7109e5aa213f3f5878cc001看到。问题是,当IDT为0x08时,代码只会抓取响应中的前2个字节,因为0x08是ETX以及IDT。我想过使用LastIndexOf,但是可能存在缓冲区中显示的多个响应。任何帮助表示赞赏。
答案 0 :(得分: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
}
}
}