将char数组从c++(客户端)传递到python(服务器)winsock
Passing char array from c++ (client) to python(server) 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);
你可能也想看看这个链接->
将浮点数从服务器发送到客户端
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- Pybind11:将元组列表从Python传递到C++
- 如何在c++中使用引用实现类似python的行为
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 递归列出所有目录中的C++与Python与Ruby的性能
- IPC使用多个管道和分支进程来运行Python程序
- 从python中调用C++函数并获取返回值
- Python 3.7 和 excess_args 的 SWIG 问题
- Python中的for循环与C++有何不同
- 使用Pybind11向Python公开Eigen::张量
- Python str to C++ to Python str
- 如何使用Python从C++中读取谷物序列化数据
- 如何在C++中使用pybind11加载一个pickle python列表
- 如何在c++中使用system()来运行包含空格的python脚本
- python集合的C++等价物是什么.计数器
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 从python调用openMP共享库时,未定义opnMP函数
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- Python 无法理解通过 Winsock 发送的 C++ 字符串
- 将char数组从c++(客户端)传递到python(服务器)winsock