2017-09-06 24 views
1

假設script.py呼叫DLLfunc()返回字節數組存儲器地址和大小[寫成C]使用​​的Python - 如何解釋由DLL

func()返回兩兩件事:

  1. 本地虛擬地址的分配uint8_tarray
  2. 這個數組的大小

什麼是從這個uint8_t數組中創建pythonic字節數組或列表的最佳方式,無需存儲器複製。換句話說,讓Python知道將指定的內存塊視爲pythonic字節數組?

感謝

+0

[鑄造成從一個字符一個Python字符串\ [\]返回由DLL]的可能的複製(https://stackoverflow.com/questions/8875185/casting-into-a-python-string-from-a-char-returned-by-a-dll) – sashoalm

回答

0

我不知道,如果它的工作原理,但試試這個:

localAddress, arraySize = func() 
yourByteArray = bytearray(ctypes.string_at(localAddress, arraySize)) 
+0

實際上,'ctypes.string_at()'已經返回一個'bytes'對象,如果你不需要'bytearray'。 (它代表Python 2.x,對於Python 2.x,你需要bytearray()包裝,否則它會返回簡單的字符串。) – waszil

+0

謝謝,我不確定string_at()是複製內存還是僅僅代表它作爲字節數組。 –