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

Passing char array from c++ (client) to python(server) winsock

我正在尝试将 char 数组形式的 c++(客户端)传递给 python(服务器)。我已经使用 winsock 创建了一个界面,我通过 hello world string 对其进行了测试并且可以正常工作。但实际上我需要将浮点数从 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?

谢谢

您想在 Python 端对值做什么?将它用作 float 类型很重要,还是您只是追求 float 的值? 将浮点值解析为字符串并发送它意味着如果要将浮点数用作浮点变量,则需要在 python 侧将其从字符串解析为浮点数。

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

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

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

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

您可能还想看看这个 link ->

Sending floating point number from server to client

您应该传递 JSON 文件

而不是传递数组

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

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

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

这样,不同的花车会出现在不同的行 Python 侧。

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

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