如何在Python缓冲区对象中进行memset?

6 投票
3 回答
14756 浏览
提问于 2025-04-17 07:03

我该如何快速重置一个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'

撰写回答