2016-05-11 2 views
0

... где разделитель также может находиться в корпусе.Разбор строки фиксированной длины с разделителем

Я работаю с ЖК-дисплеем, который имеет протокол, который использует формат ниже:

STX (1 байт) + IDT (1 байт) + Тип (1 байт) + CMD (3bytes) + [Value/Ответ (1 байт)] + ETX (1 байт)

STX - 0x07, а ETX - 0x08. IDT, поступающий с дисплея, также может быть 0x08, что вызывает у меня проблемы при попытке проанализировать ответ с дисплея. Я не писал процедуру разбора, но теперь мне поручено заставить все работать.

Исходное решение для программиста можно посмотреть по адресу https://gyazo.com/1fc74133e7109e5aa213f3f5878cc001. Проблема в том, что когда IDT равен 0x08, код просто захватывает первые 2 байта в ответе, потому что 0x08 является ETX, а также IDT. Я думал об использовании 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 
     } 
    } 
} 
Смежные вопросы