如何在Python中获取原始二进制数据的指针?
我想通过ctypes和Python的API获取原始的二进制数据指针,这些数据可以是字节、字节数组或者内存视图实例。
在读取数据时,(c_char * len(b)).from_buffer(b)
在Python 3中可以正常工作。对于写入数据,我使用了以下代码:
buffer = c_void_p()
length = c_ssize_t()
pythonapi.PyObject_AsReadBuffer(py_object(b), byref(buffer), byref(length))
不过我发现这段代码在Python 2.7中使用内存视图时是无法工作的。
1 个回答
3
目前,我使用一种通过ctypes定义的Python缓冲区结构,并通过一个Python API函数PyObject_GetBuffer从任意兼容的对象中获取缓冲区。然后,我的Python缓冲区结构对象会被转换成c_char数组,并使用PyBuffer_Release释放创建的缓冲区对象。你可以查看这个链接了解更多信息:https://github.com/Drekin/win-unicode-console/blob/master/win_unicode-console/buffer.py。