【问题标题】:ctypes void pointer array in PythonPython中的ctypes void指针数组
【发布时间】:2017-02-22 09:11:19
【问题描述】:

大家,

现在我在python中使用ctypes的模型来引入一个.dll文件。在我的源代码中,我在 C++ 中有一个函数,如下所示

bool getFrameFromStream(char* streamName, const void* framebuffer, int frame_number, int overwriteMaxPixelVal=-1)

其中 framebuffer 是指向灵活类型的像素数据数组的指针,例如char、Uint16等。由于我是python的新手,所以我使用了ctypes.create_stream_buffer,即

framebuffer = ctypes.create_string_buffer(1000000)
ctypes.cast(framebuffer, ctypes.c_void_p)

我的问题是,如果使用承诺缓冲区中的所有元素都可以是任何类型?或者只是第一个元素是灵活的,而其他元素仍然应该是 char?如果是这样,如果我想传递一个合适的变量应该怎么做。

非常感谢

【问题讨论】:

    标签: python c++ arrays pointers


    【解决方案1】:

    如果你有一个缓冲区并且你想转换成不同的类型,你应该使用struct。例如,如果您有:

    struct FrameBuffer {
        int a;
        int b;
        double d;
        float g;
    }
    

    然后,如果您在 Python 中的变量 my_data 中有表示此堆栈的字符串,则可以通过调用将其解包:

    import struct
    # ...
    mvars = struct.unpack("iidf",my_data);
    

    myvars 将是从那里解包的数据元组。

    查看我给你的link中的例子。

    【讨论】:

      猜你喜欢
      • 2012-11-30
      • 2015-09-09
      • 2013-04-03
      • 2010-11-24
      • 1970-01-01
      • 2014-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多