6
¿Cómo puedo usar la llamada de método readinto()
a un desplazamiento dentro de un bytearray
, de la misma manera que funciona struct.unpack_from
?¿Leído en un bytearray en un desplazamiento?
¿Cómo puedo usar la llamada de método readinto()
a un desplazamiento dentro de un bytearray
, de la misma manera que funciona struct.unpack_from
?¿Leído en un bytearray en un desplazamiento?
Puede usar un memoryview
para hacer el trabajo. Por ejemplo:
dest = bytearray(10) # all zero bytes
v = memoryview(dest)
ioObject.readinto(v[3:])
print(repr(dest))
Suponiendo que iObject.readinto(...)
lee los bytes 1, 2, 3, 4, y 5, entonces este código imprime:
bytearray(b'\x00\x00\x00\x01\x02\x03\x04\x05\x00\x00')
También puede utilizar el objeto memoryview
con struct.unpack_from
y struct.pack_into
. Por ejemplo:
dest = bytearray(10) # all zero bytes
v = memoryview(dest)
struct.pack_into("2c", v[3:5], 0, b'\x07', b'\x08')
print(repr(dest))
impresiones de este código
bytearray(b'\x00\x00\x00\x07\x08\x00\x00\x00\x00\x00')
Mi intención es leer directamente en el bytearray en un desplazamiento, y evitar toda la copia intermedia. –
He editado mi respuesta para incluir un ejemplo usando la clase 'memoryview', que creo que hace lo que usted quiere. – srgerg
Esta forma de vista de memoria parece lograr lo que yo quería. Si hiciera algo similar con struct.unpack_into, y usara una vista de memoria en lugar de una compensación, ¿sería lo mismo? Si este es el caso, elimine el resto de su respuesta para centrarse en esto. –