Теперь вы можете легко получить доступ к полученным данным по байтам за один раз с минимальными потерями производительности.
аюсь прочитать полные сообщения от моего GPS через последовательный порт.
Сообщение, которое я ищу, начинается с:
0xB5 0x62 0x02 0x13
Так я читаю с последовательного порта вот так
while (running !=0)
{
int n = read (fd, input_buffer, sizeof input_buffer);
for (int i=0; i<BUFFER_SIZE; i++)
{
if (input_buffer[i]==0xB5 && input_buffer[i+1]== 0x62 && input_buffer[i+2]== 0x02 && input_buffer[i+3]== 0x13 && i<(BUFFER_SIZE-1) )
{
// process the message.
}
}
Проблема в том, что мне нужно получить полное сообщение. Половина сообщения может находиться в буфере за одну итерацию. А вторая половина может прийти в сообщение на следующей итерации.
Кто-то предложил освободить буфер от полного сообщения. И затем я перемещаю оставшиеся данные в буфере в начало буфера.
Как мне сделать это или каким-либо другим способом, чтобы убедиться, что я получаю каждое полное выбранное сообщение, которое приходит?
Я хочу определенный класс и ID. Но я также могу прочитать в длину