Come è possibile utilizzare la chiamata del metodo readinto()
a un offset all'interno di bytearray
, nello stesso modo in cui funziona struct.unpack_from
?Letto in un bytearray a un offset?
6
A
risposta
12
È possibile utilizzare un memoryview
per eseguire il lavoro. Per esempio:
dest = bytearray(10) # all zero bytes
v = memoryview(dest)
ioObject.readinto(v[3:])
print(repr(dest))
Supponendo che iObject.readinto(...)
legge il byte 1, 2, 3, 4, e 5 quindi questa stampe di codice:
bytearray(b'\x00\x00\x00\x01\x02\x03\x04\x05\x00\x00')
È inoltre possibile utilizzare l'oggetto memoryview
con struct.unpack_from
e struct.pack_into
. Per esempio:
dest = bytearray(10) # all zero bytes
v = memoryview(dest)
struct.pack_into("2c", v[3:5], 0, b'\x07', b'\x08')
print(repr(dest))
stampe questo codice
bytearray(b'\x00\x00\x00\x07\x08\x00\x00\x00\x00\x00')
La mia intenzione è quella di leggere direttamente nel ByteArray a un offset, e di evitare tutte le copie intermedio. –
Ho modificato la mia risposta per includere un esempio usando la classe 'memoryview', che credo faccia ciò che si desidera. – srgerg
Questa forma di visualizzazione della memoria sembra realizzare ciò che volevo. Se facessi una cosa simile con struct.unpack_into, e usassi un memoryview invece di un offset, sarebbe lo stesso? In questo caso, rimuovere il resto della risposta per concentrarsi su questo. –