将数据复制到缓冲区(字节数组)
Copying data into a buffer (byte array)
我正在尝试将一大块数据(一些字节)复制到某个位置的更大块中。我可以在 C 中很容易地做到这一点,但现在我在 Python 中做到这一点,我很好奇 best/correct 的方法是什么。
我的做法是:
struct.pack_into("p", buffer, pos, str(data))
其中data和buffer是bytearray类型。 Python 不让我将数据复制到缓冲区而不将其转换为字符串(参见上面的类型转换),所以我想知道将一个字节数组插入另一个字节数组的正确方法是什么?
bytearray
对象是mutable sequences,你可以通过赋值给一个slice,将一个的内容复制到另一个给定的位置:
buffer[pos:pos + len(data)] = data
此处不需要或使用 struct.pack_into()
。请注意 data
可以是任何可迭代的整数,只要它们在 0-255 范围内即可;它不一定是 bytes
或 bytearray
对象。
演示:
>>> buffer = bytearray(10)
>>> data = bytes.fromhex('deadbeef')
>>> pos = 3
>>> buffer[pos:pos + len(data)] = data
>>> buffer
bytearray(b'\x00\x00\x00\xde\xad\xbe\xef\x00\x00\x00')
我正在尝试将一大块数据(一些字节)复制到某个位置的更大块中。我可以在 C 中很容易地做到这一点,但现在我在 Python 中做到这一点,我很好奇 best/correct 的方法是什么。
我的做法是:
struct.pack_into("p", buffer, pos, str(data))
其中data和buffer是bytearray类型。 Python 不让我将数据复制到缓冲区而不将其转换为字符串(参见上面的类型转换),所以我想知道将一个字节数组插入另一个字节数组的正确方法是什么?
bytearray
对象是mutable sequences,你可以通过赋值给一个slice,将一个的内容复制到另一个给定的位置:
buffer[pos:pos + len(data)] = data
此处不需要或使用 struct.pack_into()
。请注意 data
可以是任何可迭代的整数,只要它们在 0-255 范围内即可;它不一定是 bytes
或 bytearray
对象。
演示:
>>> buffer = bytearray(10)
>>> data = bytes.fromhex('deadbeef')
>>> pos = 3
>>> buffer[pos:pos + len(data)] = data
>>> buffer
bytearray(b'\x00\x00\x00\xde\xad\xbe\xef\x00\x00\x00')