Помогите пожалуйста с алгоритмом. Предложили на собеседовании дописать в следующем коде цикл
обработки экранирующих символов при приеме данных из последовательного порта.
Кроме того в конечном хранилище 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++)
{
}