1

Pythonのファイルからバイナリデータを読み取り、そのデータをACモジュールに送信しようとしています。Pythonでは、データは次のように読み取られます

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

可能であれば、データをバッファーへのポインターとして、長さをcで指定する必要があります。PyArg_ParseTupleを使用してcモジュールのパラメーターを取得しています。Python 3+には、バイナリデータ用のay / y * / y#形式指定子があることに気づきましたが、Python2.7でそれを行うのと同等の方法が必要です。

ありがとう

4

1 に答える 1

2

BufferApiを調査する必要があります。

ドキュメントから:

これらの関数は、オブジェクトがそのデータを生のバイト指向形式で公開するために使用できます。オブジェクトのクライアントは、バッファインターフェイスを使用して、最初にオブジェクトデータをコピーしなくても、オブジェクトデータに直接アクセスできます。

バッファインターフェイスをサポートするオブジェクトの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);
于 2013-02-05T21:43:14.807 に答える