如何在Python缓冲区对象中进行memset?
我该如何快速重置一个Python缓冲区对象里面的一系列值呢?
我主要是想找一个类似于memset的办法 :)
另外,解决方案需要能在Python 2.5上运行,并且要直接修改缓冲区本身(不能复制)。
3 个回答
1
如果你只是想把数值设置为零,可以使用这个:
size = ...
buffer = bytearray(size)
或者你也可以试试这个:
buffer[:] = bytearray(size)
1
如果你能写入的话,可以试试 itertools.repeat() 这个方法。
import itertools
my_buffer[:] = itertools.repeat(0, len(my_buffer))
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'