6

如何对 Python 缓冲区对象中的一组连续值进行快速重置?

主要是我在寻找一个 memset :)

PS。该解决方案应适用于 Python 2.5 并修改缓冲区本身(无副本)。

4

3 回答 3

3

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'
于 2011-11-25T19:17:29.737 回答
1

如果您只想将值设置为零,则可以使用:

size = ...
buffer = bytearray(size)

或者可能:

buffer[:] = bytearray(size)
于 2011-11-25T23:04:58.453 回答
1

如果可以写入,请尝试使用itertools.repeat()

import itertools
my_buffer[:] = itertools.repeat(0, len(my_buffer))
于 2011-11-25T15:55:37.170 回答