Я пытаюсь использовать 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 сработал.