array <-> bytestream

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
lightos
User
Beiträge: 39
Registriert: Montag 12. Dezember 2011, 19:39
Wohnort: Raum Bruchsal
Kontaktdaten:

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
Sirius3
User
Beiträge: 18309
Registriert: Sonntag 21. Oktober 2012, 17:20

@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])
Benutzeravatar
lightos
User
Beiträge: 39
Registriert: Montag 12. Dezember 2011, 19:39
Wohnort: Raum Bruchsal
Kontaktdaten:

OK, danke. So geht's natürlich auch!
Der Fehler war, frombytes() zu verwenden.
Sirius3
User
Beiträge: 18309
Registriert: Sonntag 21. Oktober 2012, 17:20

@lightos: ich habe auch frombytes verwendet. Wo Du Deinen Fehler hast, kann ich nicht nachvollziehen.
Benutzeravatar
lightos
User
Beiträge: 39
Registriert: Montag 12. Dezember 2011, 19:39
Wohnort: Raum Bruchsal
Kontaktdaten:

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.
Antworten