我试图将char数组形式的c ++(client)传递给python(服务器)。我已经使用winsock制作了一个接口,并通过hello world string测试了它,并且可以正常工作。但是实际上,我需要将浮点数从c ++传递给python。 (3个浮点让我们说x,y,z)。
这些浮点数会不断更新,因此我正在谈论的代码在while循环中并永远运行。在c ++中,我正在处理从IMU传感器捕获的实时数据,这些数据需要在Python中进一步处理。
我试图将浮点值转换为char数组:

char zarray[20];
sprintf(zarray, "%f", z_angle);// z_angle the float I need to pass
char *c[]={zarray};


然后将其发送到python:

iResult=send(sock,*c, (int)strlen(*c),0);


我在python中获得的输出如下所示:
0.1152720.1152720.115272

我不知道为什么会这样,这是什么样的格式。我尝试在以下情况后清空char * c:

iResult=send(sock,*c, (int)strlen(*c),0);
*c[0] = 0;


但这没有帮助。
有人知道为什么会这样吗?
或者还有其他方法可以使用Winsock将浮点数从C ++传递给python吗?

谢谢

最佳答案

您说要通过TCP连接在循环中发送表示浮点数的字符。 TCP连接是STREAM。这意味着您在一个接收中可能会收到多个发送的数据包,或者一次发送可能需要多个接收。

您必须使用更高级别的协议来明确声明所发送字节的含义并对其进行定界。您至少可以做的是将您的浮点数与空格分隔(或者换行符更好):

sprintf(zarray, "%f\n", z_angle);


这样,不同的浮点数将在Python的不同行上出现。

无论如何,这里使用指针数组的方式似乎过于复杂。只需使用:

iResult=send(sock,zarray, (int)strlen(zarray),0);

10-04 12:25
查看更多