1

我正在从 python 文件中读取二进制数据并尝试将该数据发送到 ac 模块。在python中,数据是这样读取的

file = open("data", "rb")
data = file.read()

如果可能,我希望将数据作为指向缓冲区的指针和 c 中的长度。我正在使用 PyArg_ParseTuple 来获取 c 模块中的参数。我注意到在 python 3+ 中有二进制数据的 ay/y*/y# 格式说明符,但我需要在 python 2.7 中使用等效的方法。

谢谢

4

1 回答 1

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);
于 2013-02-05T21:43:14.807 回答