Это вопрос 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 какя могу создать переменную B длиной 3, которая дает мне доступ на чтение / запись к той же памяти, на которую указывает указатель, заключенный в A?
Я думаю, что проблема состоит из двух частей:
- Как получить указатель из A. (я думаю, что 0x8c66fa0 указывает на объект Swig, а не на обернутый объект).
- Как инициализировать некоторый массив Python, используя указатель памяти иизвестный тип данных.(У Numpy есть метод frombuffer, но, похоже, нужен метод frommemory.) Возможно, понадобится какое-то приведение.
Это должно быть легко, я думаю, но я былчтение и взлом более одного дня!
Чтобы решить вторую часть, я думаю, что пример может начаться следующим образом:
>>> 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>
Затем попробуйте построить B (любого типа вектора)используйте «0x8902f00» и «uint16» и проверьте, не вызывает ли изменение B [2] изменения в C [2].
Большое спасибо за ваши предложения или наглядный пример.
С уважением,
Оуэн