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调用DLL
func()

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()是复制内存还是仅将其表示为字节数组