Я пытаюсь прочитать последовательный ответ от устройства. Строка, которую я читаю, длинная, и мне нужна только ее часть. Чтобы добраться до нужной части строки, я использую std::string.substr(x,y);
. Проблема, с которой я сталкиваюсь, однако, иногда я получаю ошибку исключения, потому что буфер, из которого я читаю, не имеет y символов. Вот код, который я сейчас использую для чтения значений:
while(1)
{
char szBuff[50+1] = {0};
char wzBuff[14] = {"AT+CSQ\r"};
DWORD dZBytesRead = 0;
DWORD dwBytesRead = 0;
if(!WriteFile(hSerial, wzBuff, 7, &dZBytesRead, NULL))
std::cout << "Write error";
if(!ReadFile(hSerial, szBuff, 50, &dwBytesRead, NULL))
std::cout << "Read Error";
std:: cout << szBuff;
std::string test = std::string(szBuff).substr(8,10);
std::cout << test;
Sleep(500);
Я выдаю команду "AT + CSQ". Это возвращает:
N, N
OK
Возвращает два целочисленных значения, разделенных запятой, за которой следует новая строка, после которой следует «ОК».
Мой вопрос: как я могу убедиться, что я прочитал все значения из последовательного порта перед захватом подстроки? Из того, что я понимаю, последний полученный символ должен быть новой строкой.