python嵌入后对结构进行类型转换

时间:2013-05-02 06:00:23

标签: c++ python-embedding

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

代码看起来像这样。

#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; 



}

但输出与指定的值不同。任何人都可以解释什么是错的吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

PyString_FromString假设传递的字符串以空字节终止,就像任何普通的C字符串一样。你的struct可能在某处包含一个空字节。请改用PyString_FromStringAndSize,而不是那个假设。