【问题标题】:Typecasting to a struct after python embeddingpython嵌入后类型转换为结构
【发布时间】:2013-05-02 06:00:22
【问题描述】:

我在 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; 



}

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

提前致谢。

【问题讨论】:

    标签: c++ python-embedding


    【解决方案1】:

    PyString_FromString 假定传递的字符串以空字节终止,就像任何普通的 C 字符串一样。您的结构可能在某处包含一个空字节。改用PyString_FromStringAndSize,它没有那个假设。

    【讨论】:

    • 非常感谢您的洞察力! PyString_FromStringAndSize 帮了我大忙 :)
    猜你喜欢
    • 2018-02-15
    • 2018-03-15
    • 2017-03-21
    • 2018-09-12
    • 1970-01-01
    • 2015-05-16
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多