Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python套接字接收和存储数据 我在C++程序和Python脚本之间建立了一个套接字。这一切都很简单,我想从C程序向Python发送大约20Hz的坐标。这只是第一次尝试,我想发送一组坐标,如下所示:_Python_C++_Sockets_Byte - Fatal编程技术网

Python套接字接收和存储数据 我在C++程序和Python脚本之间建立了一个套接字。这一切都很简单,我想从C程序向Python发送大约20Hz的坐标。这只是第一次尝试,我想发送一组坐标,如下所示:

Python套接字接收和存储数据 我在C++程序和Python脚本之间建立了一个套接字。这一切都很简单,我想从C程序向Python发送大约20Hz的坐标。这只是第一次尝试,我想发送一组坐标,如下所示:,python,c++,sockets,byte,Python,C++,Sockets,Byte,C++程序,服务器: struct coord { int x; int y; int z; }; struct coord co; co.x = 1; co.y = 2; co.z = 3; char *msg; msg = (char*) &co; send(newsockfd, msg,strlen((char*) &co), 0); 这是重要的一部分,在此之前,我已经成功地初始化了具有特定地址的套接字。现在我想把这三个坐标发送给pyt

C++程序,服务器:

struct coord {
    int x;
    int y;
    int z;
 };

struct coord co;

co.x = 1;
co.y = 2;
co.z = 3;


char *msg;
msg = (char*) &co;

send(newsockfd, msg,strlen((char*) &co), 0);
这是重要的一部分,在此之前,我已经成功地初始化了具有特定地址的套接字。现在我想把这三个坐标发送给python程序。我将地址发送到第一个整数(co.x)和分配的内存(应该是12字节)

这是python脚本。同样,我只包括了重要的东西

sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect(server_address)
recvInt = sock.recv(4096)
现在我想访问前4个字节并将其存储在一个变量中,接下来的4个字节存储在一个单独的变量中,最后4个字节存储在第三个变量中。但是我该怎么做呢?recvInt是一个看似无用的对象字节,我还没有把它转换成任何东西,打印输出也没有任何意义。谁能帮我一下,或者给我指个方向吗

编辑:当我打印出:type(recvInt)时,它说这是一个str。考虑到函数socket.recv()的文档,它清楚地表明它返回一个字节,这也很奇怪。不过,现在我还发现了一些文档,说明这个函数应该返回数据的字符串表示形式。哪个是正确的?这个假定的字符串表示是一个四位数的小盒子,看起来像一个字节的视觉表示。然而,msg包含12个字节,并且在recvInt上没有索引。 谢谢

看看python库

基本上,对于您的情况,下面这样的方法可能会奏效

import struct

x, y, z = struct.unpack("!iii", receivedData)
上面的代码将接收到的字符串解析为3个有符号整数


socket.recv
返回一个基本上是字节数组的二进制字符串。Python没有为recvInt或parseInt提供单独的函数,而是提供了一个库,用于将任意二进制字符串解析为不同大小的整数或字符串。

非常感谢。我记不起上一次这么沮丧的时候了。
strlen
函数只能用于字符串。您不能在任意二进制数据上使用它并期望得到合理的结果。