Читать в байтовый массив со смещением? - PullRequest
6 голосов
/ 25 ноября 2011

Как можно использовать вызов метода readinto() для смещения внутри bytearray, так же, как работает struct.unpack_from?

1 Ответ

12 голосов
/ 25 ноября 2011

Вы можете использовать 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')
...