Помогите пожалуйста с алгоритмом. Предложили на собеседовании дописать в следующем коде цикл
 обработки экранирующих символов при приеме данных из последовательного порта. 
Кроме того в конечном хранилище response должен находится принятый пакет, который начинается с байта PACKET_BYTE_START (неэкранированного).
То есть перед каждой обработкой в массиве buf[512] будет находится bytesReaded количество прочитанных из порта байт не обязательно с начала пакета естественно, 
и из этого массива нужно будет удалить экранирующие байты PACKET_BYTE_ESC (если они не являются полезными данными).
#define PACKET_BYTE_START           0xFF
#define PACKET_BYTE_ESC             0xFE
uint8_t buf[512]; // массив содержащий прочитанные из порта байты
std::basic_string<uint8_t> response; // хранилище куда нужно поместить полезные байты
while (1) {
  // Чтение доступных байт из порта устройства
  uint16_t bytesReaded = portIO->read(buf, sizeof(buf),  read_timeout*1000);
  // Если в порт ничего не пришло, выходим из цикла
  if (bytesReaded <= 0) {
    return E_TIMEOUT;
  }
  // Обработка и удаление экранирующих символов (необходимо дописать цикл обработки)
  for (size_t i = 0; i < bytesReaded; i++) {
  // сохранить текущий прочитанный байт
  uint8_t byte = buf[i];
  // поместить байт в конечное хранилище
  response.push_back(byte);
  } // до тех пор, пока не обработали все принятые из порта байты
}
При таком раскладе в цикле for (size_t i = 0; i < bytesReaded; i++) просто тупо копируются байты из буфера в хранилище response без всякой обработки. 
а мне нужен такой цикл 
for (size_t i = 0; i < bytesReaded; i++)
{
}




