我正在从python中的文件中读取二进制数据并尝试将该数据发送到c模块。在python中,数据读取如此
file = open("data", "rb")
data = file.read()
我希望数据作为指向缓冲区的指针,如果可能,我希望c中的长度。我正在使用PyArg_ParseTuple来获取c模块中的参数。我注意到在python 3+中有二进制数据的y / y * / y#format说明符,但我需要在python 2.7中使用它的等效方法。
由于
答案 0 :(得分:2)
您应该调查Buffer Api。
来自文档:
对象可以使用这些函数以原始的面向字节的格式公开其数据。对象的客户端可以使用缓冲区接口直接访问对象数据,而无需先复制它。
支持缓冲区接口的两个对象示例是字符串和数组。字符串对象以缓冲区接口的面向字节的形式公开字符内容。数组也可以公开其内容,但应注意数组元素可能是多字节值。
例如(在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);