我想念memset。我在一个类中有一个帧缓冲区,它有一些来自其他操作的数据,现在我想将该帧缓冲区中的所有内容清除为0x00或0xFF。我没有在文档中看到明确的方法,有一个zfill方法可能有效。我想过再次调用字节数组的init方法,但想知道这是否会给我带来一些内存问题。
我正在使用python 2.7。
答案 0 :(得分:5)
Python 不是C ,在这里你根本不需要担心内存。。你只是这样做:
a = bytearray("abcd") # initialized it with real data
a = bytearray(5) # just a byte array of size 5 filled with zeros
答案 1 :(得分:4)
In [1]: ba = bytearray(range(100))
In [2]: ba
Out[2]: bytearray(b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abc')
In [3]: ba[:] = b'\x00' * len(ba)
In [4]: ba
Out[4]: bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
答案 2 :(得分:3)
如果您想对帧缓冲区进行高性能操作,请考虑使用NumPy。您可以将帧缓冲区表示为uint8
的NumPy数组:
import numpy as np
fb = np.zeros((480, 640), dtype=np.uint8) # a 640x480 monochrome framebuffer
然后非常简单地清除帧缓冲区:
fb[:] = 0 # or fb[:] = 0xff
另一个很大的优势是你可以获得一个快速的2D数组 - 你可以像fb[80:120, 40:60]
这样的东西来便宜地得到一个矩形区域,你可以用非常少的代码实现像blitting这样的绘制操作。另外,使用np.tobytes
,您仍然可以获得字节表示。