将char数组从c++(客户端)传递到python(服务器)winsock



我正在尝试将char数组从c++(客户端)传递到python(服务器)。我用winsock做了一个接口,我用helloworld字符串测试了它,它能工作。但实际上,我需要将浮点从c++端传递给python。(3个浮点,比方说x,y,z)。这些浮动是不断更新的,所以我所说的代码处于while循环中并永远运行。在c++中,我正在处理从IMU传感器捕获的实时数据,这些数据需要在Python中进一步处理。我尝试将浮点值转换为字符数组:

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, "%fn", z_angle);

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

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

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

不应该传递数组,而应该传递JSON文件

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

c++和python应用程序是否都在同一平台上运行?

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

此外,为什么要将zarray复制到c变量?您可以简单地将zarray变量传递给send函数:

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

你可能也想看看这个链接->

将浮点数从服务器发送到客户端

最新更新