Я получаю буфер через соединение с сокетом udp.Код с ++.Вывод выглядит так:
>>375.5,25.3
, где числа разделены запятой и без пробелов.И каждые 100 мс отправляется новый набор чисел.например:
>>375.5,25.3
>>435.6,0.0
>>2500.34,55.2
и т. д.
Я пытаюсь поместить первое число в var1 и второе число в var2 для каждого нового набора.var1 и var2 не являются массивами.Представьте, что мне просто нужно напечатать что-то вроде:
>>var1=375.5
var2=25.3
>>var1=435.6
var2=0.0
Вот код, который я использую:
recv_len = recvfrom(s, buff, sizeof(buff), 0, (struct sockaddr *)&si_other, (socklen_t*)&slen);
if (recv_len== -1)
{
printf("Receiving message failed");
exit(0);
}
buff[recv_len] = '\0';
std::vector<int> vect;
std::stringstream ss(buff);
int i;
while (ss >> i)
{
vect.push_back(i);
if (ss.peek() == ',' || ss.peek() == ' ')
ss.ignore();
}
var1 = vect.at(0);
var2 = vect.at(1);
printf("Received packet from %s:%d\nData:%s\n\n",inet_ntoa(si_other.sin_addr),ntohs(si_other.sin_port),buff);
cout<<var1<<endl;
cout<<var2<<endl;
вывод, который я получаю, является ошибкой, что-то с размером 1. (извините, я не сохранил вывод этого, чтобы дать точную ошибку вывода. Я отредактирую завтра.) Когда я закомментирую "var2 = vect.at (1)", вывод будет:
>>Received packet from 127.0.0.1:31029
Data: 375.5,25.3
375.5
0
так что это показывает, что мне нужны оба числа, но это не позволит мне разделить их.Я получил разделитель через запятую от этого: Разобрать разделенный запятыми std :: string , но выдает ошибку.
Мне просто нужно отделять буфер каждый раз, когда он входит, как:
>>375.5,25.3
, введите var1 = 375.5 и var2 = 25.3, затем
>>435.6,0.0
входит, введите var1 = 435.6, введите var2 = 0.0
>>2500.34,55.2
, введите var1 = 2500.34 и var2 = 55.2
и так далее.
--------------------- РЕДАКТИРОВАТЬ ----------------------------
Я получил ошибку, которую не мог вспомнить сверху:
>>Terminate called after throwing an instance of 'std::out_of_range'
what(): vector::_M_range_check: __n (which is 1) >= this->size() (which is 1)