2015-11-17 77 views
0

我想通过字符数组窗体c + +(客户端)到python(服务器)。我使用winsock创建了一个接口,我使用hello world字符串测试了它,它工作正常。但实际上我需要从C++端传递给Python。 (3个花车可以说,x,y,z)。 这些浮点数不断更新,所以我说的代码是在while循环中运行的。在C++中,我正在处理从IMU传感器捕获的实时数据,这些需要在Python中进一步处理。 我试图浮点值转换成字符数组:从c + +(客户端)传递字符数组到python(服务器)winsock

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?

谢谢

回答

1

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

必须使用更高级别的协议来清楚地声明发送的字节是什么意思并划定它们。你可以做最不重要的是你的彩车用空格(甚至更好用换行)分隔:

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

这样一来,不同的花车会在不同的行Python端。

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

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

我只是想增加一个空间,但是这个效果太 – SurDin

+0

谢谢。它使用sprintf(zarray,“%f \ n”,z_angle); – userMilka

+0

谢谢。它使用sprintf(zarray,“%f \ n”,z_angle)..但我需要发送x_angle,y_angle。我试图将这些角度转换为字符串连接它们与“!”(所以我可以拆分python一侧的字符串),然后将它们转换为字符。 x_angle,y_angle,z_angle同时更新,我需要将它们一起发送。这是我在Python中得到的:'它不起作用。有没有什么聪明的方法可以使用TCP将3个浮点数传递给服务器。 – userMilka

0

你想在Python方面做什么?将它作为浮点类型使用很重要吗?或者您只是在浮点数之后使用它? 将float值解析为字符串并发送它意味着如果要将float用作float变量,则需要从字符串解析该值以浮点在python端。

C++和python应用程序都在同一个平台上运行吗?

当通过网络发送浮动数据时,您需要考虑排序,因为不同的平台可能会以不同的方式处理浮动。

另外,为什么复制zarray到c变量?您可以在z阵列变量简单地传递给发送功能:

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

你可能想看看这个链接,以及 - >

Sending floating point number from server to client

+0

OP不会发送二进制浮点数,而是发送字符串编码的浮点数。字节顺序在这里不是问题。 –

+0

当然,但OP确实询问了通过网络发送浮动的其他方式“或者是否有任何其他方式可以使用winsock将C++中的浮动数据传递给python?” – pieterlouw

0

而是传球达阵,你应该通过JSON文件

相关问题