Seite 1 von 1

Buffer auslesen

Verfasst: Freitag 13. März 2015, 10:29
von Slaxx
Hallo zusammen
I habe ein UDP package das von einem C++ Programm geschickt wird. Mittlerweile habe ich es geschafft, dass es zumindest zwischendurch von meinem Python Programm empfangen werden kann. Allerdings sind die Daten in einem Buffer.
Im C++ haben die Daten folgende Form:

Code: Alles auswählen

struct packet{
    double arg1
    double arg2
    double arg3
    double arg4
    int arg5
}
Die Daten die ich im Python erhalte sind 42 bytes lang (die Länge stimmt mit der Länge der versandten Daten überein). Ich weiss allerdings noch nicht ob bevor die Daten versendet werden noch irgendwelche Operationen ausgeführt werden. Da bin ich noch dran.
Meine Frage nun: Nehmen wir an, die Daten würden 1 zu 1 in den Buffer kopiert und gesendet. Wie kann ich diese in Python wieder auslesen? (Ich benutze Python 2.7.9)

Danke schon mal im voraus

Re: Buffer auslesen

Verfasst: Freitag 13. März 2015, 10:36
von jerch
@Slaxx:
Dafür gibt es das struct-Modul in Python. Wobei die 42 Bytes nicht mit der struct-Deklaration übereinstimmen, da würde ich nur 36 bzw. 40 Bytes erwarten (je nach Alignment). Heisst da kommt mehr mit als die Daten des Structs.

Re: Buffer auslesen

Verfasst: Freitag 13. März 2015, 10:57
von Hyperion
Wenn Du Einfluss auf das Protokoll nehmen kannst, dann würde ich Dir google Protocol Buffers empfehlen, sofern es ein Byte sparendes Format sein soll. Damit ersparst Du Dir diese Low-Level Parserei :-)

Re: Buffer auslesen

Verfasst: Freitag 13. März 2015, 11:11
von BlackJack
Alternativ vielleicht auch MessagePack. Hat ein paar Bytes mehr, dafür ist die Struktur in den Daten mitkodiert. Eine Liste mit vier Gleitkommazahlen und einer ganzen Zahl mit maximal 32 Bit ist kodiert zwischen 38 und 42 Bytes gross. 46 Bytes wenn die ganze Zahl 64 Bit gross werden darf.

Re: Buffer auslesen

Verfasst: Freitag 13. März 2015, 13:16
von Slaxx
Problem wurde hier gelöst: http://stackoverflow.com/questions/2902 ... fer-decode
Falls mal jemand per Zufall auf diesen Thread stösst und eine Lösung sucht.

Re: Buffer auslesen

Verfasst: Samstag 14. März 2015, 11:27
von jerch
@Slaxx:
Die Antwort von Stackoverflow beantwortet nicht die 42 Bytes.

Re: Buffer auslesen

Verfasst: Samstag 14. März 2015, 11:44
von Slaxx
Es sind mittlerweile auch nur noch 40 bytes. Da ich den int auf int16_t gewechselt habe.
Thread kann aber geschlossen werden.

Re: Buffer auslesen

Verfasst: Samstag 14. März 2015, 11:44
von BlackJack
@jerch: Laut SO-Frage sind es ja auch nur noch 40 Bytes. Und die scheinen sich aus Pakettyp (2 Bytes), Paketversion (2 Bytes), laufender Zähler (2 Bytes) und dann den Nutzdaten: vier ``double``-Werte (je 8 Bytes) und einem ``short`` (2 Bytes) zusammenzusetzen.

Re: Buffer auslesen

Verfasst: Samstag 14. März 2015, 11:47
von Slaxx
Genau, besser hätte ich es nicht zusammenfassen können.