我正在尝试使用Python ctypes从共享库中调用这两个C函数:
bool decompress_rgb(unsigned char *data, long dataLen, int scale)
float* getRgbBuffer()
第一个函数已经正常工作了。我可以通过在共享库中添加一些调试代码并检查输入来确定。问题在于取数据。RGB缓冲区是指向浮点数的指针(显然),这个指针在应用程序的生命周期内保持不变。因此,每当我想解压缩图像时,我都会调用
decompress_rgb
,然后需要查看由getRgbBuffer
指向的位置上有什么值。我知道缓冲区的大小为(720 * 288 * sizeof(float)),所以我猜这个大小需要在某个地方发挥作用。没有
c_float_p
类型,所以我想尝试这个:getRgbBuffer.restype = c_char_p
然后我执行:
ptr = getRgbBuffer()
print "ptr is ", ptr
这只是输出:
ptr = 3078746120
我猜这是实际地址而不是内容,但即使我成功解除指针引用并获取内容,它也只是第一个字符。
如何将整个缓冲区的内容传输到Python字符串中?
编辑:必须更改:
getRgbBuffer.restype = c_char_p
为了
getRgbBuffer.restype = c_void_p
但是BastardSaint的答案最终起作用了。
print rgb_buffer.value
打印内容到第一个 null 字符为止: 不管怎样,现在很高兴它能工作了 :) - Steef