如何在偏移量处读取字节数组?

13 投票
1 回答
6551 浏览
提问于 2025-04-17 07:01

我该如何使用 readinto() 方法,将数据读入一个 bytearray 的某个偏移位置,就像 struct.unpack_from 那样?

1 个回答

20

你可以使用一个叫做 memoryview 的东西来完成这个任务。比如:

dest = bytearray(10) # all zero bytes
v = memoryview(dest)
ioObject.readinto(v[3:])
print(repr(dest))

假设 iObject.readinto(...) 读取了字节 1、2、3、4 和 5,那么这段代码会打印:

bytearray(b'\x00\x00\x00\x01\x02\x03\x04\x05\x00\x00')

你还可以把 memoryview 对象和 struct.unpack_from 以及 struct.pack_into 一起使用。比如:

dest = bytearray(10) # all zero bytes
v = memoryview(dest)
struct.pack_into("2c", v[3:5], 0, b'\x07', b'\x08')
print(repr(dest))

这段代码会打印

bytearray(b'\x00\x00\x00\x07\x08\x00\x00\x00\x00\x00')

撰写回答