Приведите буфер в указатель к байтовому массиву, а затем получите значение из этого.Кроме того, если вы работаете в 64-битной системе, вам нужно обязательно установить тип возвращаемого значения malloc
равным c_void_p
(не по умолчанию int
), чтобы возвращаемое значение непотерять все биты.
Вам также нужно быть осторожным, если в ваших данных есть встроенные NUL - вы не можете просто преобразовать указатель в c_char_p
и преобразовать его в строку (что особенно верно, если ваши данные вообще не заканчиваются NUL).
malloc = ctypes.dll.msvcrt.malloc
malloc.restype = ctypes.c_void_p
pBuf = malloc(nBufSize)
...
# Convert void pointer to byte array pointer, then convert that to a string.
# This works even if there are embedded NULs in the string.
data = ctypes.cast(pBuf, ctypes.POINTER(ctypes.c_ubyte * nBufSize))
byteData = ''.join(map(chr, data.contents))
with open(filename, mode='wb') as f:
f.write(byteData)