Python—如何将DLL返回的内存地址和大小解释为字节数组
假设Python—如何将DLL返回的内存地址和大小解释为字节数组,python,memory-management,dll,Python,Memory Management,Dll,假设script.py使用ctypes调用DLLfunc() func()返回两件事: 已分配的uint8\u t数组的本地虚拟地址 此数组的大小 从这个uint8\t数组生成pythonic字节数组或列表的最佳方法是什么,而无需复制内存。换句话说,让Python知道如何将指定的内存块视为Python字节数组 谢谢我不确定它是否有效,但试试这个: localAddress, arraySize = func() yourByteArray = bytearray(ctypes.string_at
script.py
使用ctypes调用DLLfunc()
func()
返回两件事:
已分配的uint8\u t
数组的本地虚拟地址
此数组的大小
从这个uint8\t
数组生成pythonic字节数组或列表的最佳方法是什么,而无需复制内存。换句话说,让Python知道如何将指定的内存块视为Python字节数组
谢谢我不确定它是否有效,但试试这个:
localAddress, arraySize = func()
yourByteArray = bytearray(ctypes.string_at(localAddress, arraySize))
我不确定它是否有效,但试试这个:
localAddress, arraySize = func()
yourByteArray = bytearray(ctypes.string_at(localAddress, arraySize))
实际上,ctypes.string_at()
已经返回了一个bytes
对象,如果您不需要bytearray
。(它代表Python3.x,对于Python2.x,您需要bytearray()包装,否则它将返回简单的字符串。)谢谢,我不确定string_at()是否复制内存或只是将其表示为字节数组。实际上,ctypes.string_at()
已经返回了一个bytes
对象,如果您不需要bytearray
。(它代表Python3.x,对于Python2.x,您需要bytearray()包装,否则它将以简单字符串返回。)谢谢,我不确定string_at()是复制内存还是仅将其表示为字节数组