Как сделать memset с буферным объектом Python? - PullRequest
6 голосов
/ 25 ноября 2011

Как мне сделать быстрый сброс для продолжения набора значений внутри объекта буфера Python?

В основном я ищу memset:)

PS.Решение должно работать с Python 2.5 и изменять сам буфер (без копии).

Ответы [ 3 ]

2 голосов
/ 25 ноября 2011

В пакет ctypes встроена функция memset. Ctypes работает с Python 2.5, но по умолчанию не включена. Вам потребуется отдельная установка.

def memsetObject(bufferObject):
    "Note, dangerous"
    import ctypes
    data = ctypes.POINTER(ctypes.c_char)()
    size = ctypes.c_int()  # Note, int only valid for python 2.5
    ctypes.pythonapi.PyObject_AsCharBuffer(ctypes.py_object(bufferObject), ctypes.pointer(data), ctypes.pointer(size))
    ctypes.memset(data, 0, size.value)

testObject = "sneakyctypes"
memsetObject(testObject)
print repr(testObject)
# '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
1 голос
/ 25 ноября 2011

Если вы можете писать, попробуйте с помощью itertools.repeat ()

import itertools
my_buffer[:] = itertools.repeat(0, len(my_buffer))
0 голосов
/ 26 ноября 2011

Если вы просто хотите установить значения на ноль, вы можете использовать это:

size = ...
buffer = bytearray(size)

или, возможно:

buffer[:] = bytearray(size)
...