gpt4 book ai didi

c++ - 如何将缓冲区从套接字分离到不同的变量?

转载 作者:行者123 更新时间:2023-11-30 04:56:40 27 4
gpt4 key购买 nike

我正在通过 udp 套接字连接接收缓冲区。代码是c++。输出如下:

>>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

所以它表明我需要两个数字,但不允许我将它们分开。我从中得到了逗号分隔: Parsing a comma-delimited 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)

最佳答案

您找到的答案适用于整数,不适用于 float 。反正问题很容易解决。如果您确定缓冲区的格式(即 2 个 float ,用逗号分隔,没有空格),解决方案可能如下所示:

char buff[] = "375.5,25.3";
std::string s(buff);
std::cout << std::stof(s.substr(0, s.find(','))) << std::endl;
std::cout << std::stof(s.substr(s.find(',')+1, s.size())) << std::endl;

您基本上可以只使用 substr 创建 2 个子字符串:一个在逗号之前,另一个在逗号之后,然后使用 stof 将其转换为浮点值。

如果您需要更强大的东西,请查看 at this answer获取更完整的代码来拆分字符串并捕获 stof 可能抛出的异常.

关于c++ - 如何将缓冲区从套接字分离到不同的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52400766/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com