如何将Python 2.7中的二进制数据正确传递给C模块
我正在用Python从一个文件中读取二进制数据,然后想把这些数据发送到一个C语言模块。在Python中,数据是这样读取的:
file = open("data", "rb")
data = file.read()
我希望在C语言中能得到一个指向缓冲区的指针和数据的长度。如果可以的话,我在C模块中使用PyArg_ParseTuple来获取参数。我注意到在Python 3及以上版本中,有一种y/y*/y#的格式说明符可以用来处理二进制数据,但我需要在Python 2.7中找到类似的方法。
谢谢
1 个回答
2
你应该了解一下缓冲区接口。
根据文档的说明:
这些函数可以让一个对象以原始的、字节为基础的格式来展示它的数据。对象的使用者可以通过缓冲区接口直接访问这些数据,而不需要先复制一份。
支持缓冲区接口的对象有两个例子:字符串和数组。字符串对象可以以字节形式展示它的字符内容。数组也可以展示它的内容,但需要注意的是,数组的元素可能是多个字节的值。
举个例子(用C++语言):
void* ExtractBuffer(PyObject* bufferInterfaceObject, Py_buffer& bufferStruct)
{
if (PyObject_GetBuffer(bufferInterfaceObject, &bufferStruct, PyBUF_SIMPLE) == -1)
return 0;
return (void*)bufferStruct.buf;
}
当你不再需要bufferStruct的时候,别忘了释放它:
PyBuffer_Release(&bufferStruct);