python嵌入后对结构的类型转换 我有一个嵌入在C++程序中的小Python脚本。在将Python对象暴露到C++程序并将其复制到C++变量之后,我尝试将其类型化为结构,但我没有得到预期值。这里怎么了?] 我使用python进行套接字编程,将数据从一个系统发送到另一个系统

python嵌入后对结构的类型转换 我有一个嵌入在C++程序中的小Python脚本。在将Python对象暴露到C++程序并将其复制到C++变量之后,我尝试将其类型化为结构,但我没有得到预期值。这里怎么了?] 我使用python进行套接字编程,将数据从一个系统发送到另一个系统,c++,python-embedding,C++,Python Embedding,代码如下所示 #include #include struct overhead{ uchar8 flags; uint16 seqNo, timeDiff, threshold, length; }; struct payload{ float forceX,forceY,forceZ,positionX,positionY,positionZ; }; struct packet{ overhead fields; payload

代码如下所示

#include
#include


struct overhead{

    uchar8 flags;
    uint16 seqNo, timeDiff, threshold, length;  

};

struct payload{

    float forceX,forceY,forceZ,positionX,positionY,positionZ;

};

struct packet{

    overhead fields;
    payload data;

};

const char * msg;

int main(){

    packet pack;

    /* assign values to members of packet
    pack.fields.threshold = 
    pack.data.forceZ = */

    msg = (const char *) &pack;

    PyObject *PyMain = PyImport_AddModule("__main__");
    PyObject *globals = PyModule_GetDict(PyMain);

    PyObject *string = PyString_FromString(msg);
    PyDict_SetItemString(globals, "send", string);

    const char* sendPy = "UDPSock.sendto(send,('10.107.35.167',2000))";
    PyRun_SimpleString(sendPy);

    PyObject *temp = PyDict_GetItemString(globals, "send");
    const char* x = PyString_AsString(temp);

    packet *pa = (packet *) x;
    cout << pa->data.forceZ << endl; 



}
#包括
#包括
结构开销{
uchar8旗;
uint16序列号、时间差、阈值、长度;
};
结构有效载荷{
浮动力X,力Y,力Z,位置X,位置Y,位置Z;
};
结构包{
架空场;
有效载荷数据;
};
常量字符*msg;
int main(){
包装;
/*将值分配给数据包的成员
pack.fields.threshold=
pack.data.forceZ=*/
msg=(常量字符*)&pack;
PyObject*PyMain=PyImport\u AddModule(“\uuuu main\uuuu”);
PyObject*globals=PyModule_GetDict(PyMain);
PyObject*string=PyString\u fromsg;
PyDict_SetItemString(全局,“发送”,字符串);
const char*sendPy=“UDPSock.sendto(send,('10.107.35.167',2000))”;
Pirun_SimpleString(sendPy);
PyObject*temp=PyDict_GetItemString(全局,“发送”);
const char*x=PyString_AsString(temp);
包*pa=(包*)x;

cout data.forceZ假设传递的字符串与任何普通C字符串一样以空字节终止。您的结构可能在其中的某个位置包含空字节。请改用它,因为它没有这种假设。

非常感谢您的洞察力!PyString_FromStringAndSize为我做了这件事:)