我正在尝试使用 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 的回答奏效了。