これはPythonの質問です。私は変数Aを持っています
>>> A
<Swig Object of type 'uint16_t *' at 0x8c66fa0>
>>> help(A)
class PySwigObject(object)
Swig object carries a C/C++ instance pointer
A によって参照されるインスタンスは連続配列 uint16[3] であり、問題は Python からその配列にアクセスすることです。
Python では、長さ 3 の変数 B を作成する方法を教えてください。これにより、A でラップされたポインターが指す同じメモリへの読み取り/書き込みアクセスが可能になります。
問題には次の 2 つの部分があると思います。
- A からポインターを取得する方法 (0x8c66fa0 は、ラップされたオブジェクトではなく、Swig オブジェクトを指していると思います)。
- メモリ ポインターと既知のデータ型を使用して、ある種の Python 配列を初期化する方法。(Numpy には frombuffer メソッドがありますが、必要と思われるのは frommemory メソッドです。) おそらく、いくつかのキャストが必要になるでしょう。
これは簡単だと思いますが、私は 1 日以上本を読んだりハッキングしたりしてきました!
2番目の部分を解決するには、例を次のように始めることができると思います:
>>> import numpy
>>> C = numpy.ascontiguousarray([5,6,7],"uint16")
>>> C
array([5, 6, 7], dtype=uint16)
>>> C.data
<read-write buffer for 0x8cd9340, size 6, offset 0 at 0x8902f00>
次に、"0x8902f00" と "uint16" を使用して B (ベクター タイプに関係なく) を構築し、B[2] を変更すると C[2] が変更されるかどうかをテストします。
あなたの提案や明確な例に感謝します。
よろしく、
オーウェン