Seite 1 von 1

array <-> bytestream

Verfasst: Freitag 29. Mai 2015, 09:32
von lightos
Optimale Umsetzung gesucht:

Code: Alles auswählen

import array

arU16 = array.array('H')

bytes = b'\x00\x00\x01\x00\x02\x00\x03\x00' # 16-bit bytestream

arU16.frombytes(bytes) # das funktioniert nicht, da das Array vom typ verändert wird

arU16.tobytes() erzeugt den korrekt byte-Stream. Aber wie funktioniert das in die andere Richtung? frombytes() liefert nicht das gewünschte Ergebnis.
Das array soll vom typ ('H') bleiben.

Das mit einer Schleife in python zu lösen wäre einfach, aber bei großen Daten sollte es eine effizientere Lösung geben.

Danke an alle.

lightos

Re: array <-> bytestream

Verfasst: Freitag 29. Mai 2015, 12:09
von Sirius3
@lightos: Dein Problem kann ich nicht nachvollziehen. Natürlich bleibt das Array ein 16bit-UInt-Array:

Code: Alles auswählen

>>> print(arU16)
array('H', [0, 1, 2, 3])

Re: array <-> bytestream

Verfasst: Freitag 29. Mai 2015, 12:35
von lightos
OK, danke. So geht's natürlich auch!
Der Fehler war, frombytes() zu verwenden.

Re: array <-> bytestream

Verfasst: Freitag 29. Mai 2015, 13:00
von Sirius3
@lightos: ich habe auch frombytes verwendet. Wo Du Deinen Fehler hast, kann ich nicht nachvollziehen.

Re: array <-> bytestream

Verfasst: Freitag 29. Mai 2015, 14:19
von lightos
Mein Denkfehler!
Das Array war nicht leer!!!

Code: Alles auswählen

u16=array.array('H', [1,2,3,4])
bs = b'\x01\x02\x03\x04'
u16.frombytes(bs) # die Daten werden angehängt
-> u16 = array('H', [1, 2, 3, 4, 513, 1027])

Damit hat sich das Problem erledigt.
Danke für die Unterstützung.