Hallo schon wieder ich:
Ich habe eine Frage:
Die Stringlänge beim Unpack berechnet sich doch nach den Bytelängen der Format Charactes
Also müsse folgendes unten 12 Byte ergeben 8 x 1 Byte und INT als 4 Byte?
oder eas rechne ich falsch?
z1=unpack("BBBBBBIBB",answer)
bekomme jedoch die Fehlermeldung dass 13 Byte benötigt werden?
Danke und Grüsse
Thomas
Unpack Stringlänge
Hallo thomasgull,
bei »struct« gibt es die Funktion »calcsize« die die Anzahl der Bytes ausrechnet.
In Deinem Fall hast Du default-C-Packvariante inklusive Alignment gewählt, was Dir 6 Bytes + 2 Füllbytes + 1 Int + 2 Bytes = 14 beschert. Um nicht auf die Endingness des Prozessors hereinzufallen nutze ich immer < oder > als Angabe, dann ist Alignment auch kein Problem.
Grüße
Sirius
bei »struct« gibt es die Funktion »calcsize« die die Anzahl der Bytes ausrechnet.
In Deinem Fall hast Du default-C-Packvariante inklusive Alignment gewählt, was Dir 6 Bytes + 2 Füllbytes + 1 Int + 2 Bytes = 14 beschert. Um nicht auf die Endingness des Prozessors hereinzufallen nutze ich immer < oder > als Angabe, dann ist Alignment auch kein Problem.
Grüße
Sirius
-
thomasgull
- User
- Beiträge: 48
- Registriert: Samstag 2. Februar 2013, 18:52
Danke,
die Meldung ist aber auf 13 Byte
struct.error: unpack requires a string argument of length 13
die Stringlänge ist genau 12 Byte die am Seriellen Port kommt und die Struktur ist gegeben vom Telegramm her, das letze Byte ist die CRC, Danach der INT-ist der Messwert unskaliert.
von welcher seite as wir mit > oder< gelsen, damit die Position stimmt?
Eigentlich willich damit
die Meldung ist aber auf 13 Byte
struct.error: unpack requires a string argument of length 13
die Stringlänge ist genau 12 Byte die am Seriellen Port kommt und die Struktur ist gegeben vom Telegramm her, das letze Byte ist die CRC, Danach der INT-ist der Messwert unskaliert.
von welcher seite as wir mit > oder< gelsen, damit die Position stimmt?
Eigentlich willich damit
-
thomasgull
- User
- Beiträge: 48
- Registriert: Samstag 2. Februar 2013, 18:52
Nein Klar wo der Fehler liegt die Richtige Reihenfolge ist ("BBBBBBBIB", und somit 1 Füllbyte, sorry
