ctypes和指针操作

5 投票
2 回答
3427 浏览
提问于 2025-04-15 20:42

我正在处理图像数据,想要在图像的某几行中访问数据,以便用一个C语言的库进行分析。我在Python中使用create_string_buffer创建了一个8位像素的缓冲区。请问有没有办法在不重新创建新缓冲区的情况下,获取到这个缓冲区内某个位置的指针?我的目标是能够分块分析和修改这个缓冲区中的数据,而不需要频繁地创建缓冲区和复制数据。

在这种情况下,最终是C语言库在处理这个缓冲区,所以我实际上不需要用Python去改变缓冲区里的值。我只需要让我的C函数能够访问到缓冲区中的数据就可以了。

2 个回答

0

你也可以使用 ctypes.cast(buf, ctypes.c_void_p) 这个方法。

8

create_string_buffer 是一个可以让你创建 ctypes 对象(也就是一组字符的数组)的方法,然后使用 byref,我来给你引用一下它的说明:

这个方法返回一个轻量级的指针,指向 obj,这个 obj 必须是 ctypes 类型的实例。offset 默认是零,必须是一个整数,这个整数会加到内部指针的值上。

从 2.6 版本开始,offset 这个参数才被加入,所以如果你用的是更老的版本,那你可能需要做更多的工作。

撰写回答