Ich habe eine rohe Binärdatei (1 KB ↓), die eine serielle Datensicherung eines GPS-Datenstroms (zusammen mit einigen zugehörigen Metadaten) ist. Ich versuche speziell, einen Wert aus der Binärdatei zu ziehen, die die GPS-Zeit darstellt. Ich kenne seinen Offset und seine Breite in der Datei (10 bzw. 8 Bytes, mit einer Gesamtbildbreite von 28 Bytes), aber es ist auf eine sehr seltsame Art und Weise codiert, wie in dem Zitat unten beschrieben.Decoding Scrambed Binärdaten von GPS mit Python
Was ist die pythonischste Art, diese Daten (in eine Liste oder ein Array) zu lesen?
GPS-Zeit - GPS-Sensor (Zeit der Woche in Sekunden, bei ab Samstag 2400 Stunden/Sonntag 0000 Stunden), wenn die GPS-Zeit gültige Nachricht 3500 auf 1 gesetzt ist, sonst SDN500 Systemzeit seit Einschalten wird gemeldet. Datenworte in der Reihenfolge 2, 1 (MSW), 4 (LSW), 3.
Eine Nachricht, Wortlänge 16 Bits auf der SDN500-HV-Schnittstelle. Das SDN500-HV-Protokoll, das einen Standard Universal Asynchronous Empfängersender (UART) verwendet, überträgt Daten in 8-Bit-Gruppen (Bytes). Dies bedeutet, dass zwei Bytes benötigt werden, um eine Nachricht Wort zu bilden.
Ein Byte von Informationen als eine Folge von 11 Bits übertragen: ein Startbit, 8 Datenbits (niederwertigste Bit (LSB) zuerst), eine Paritätsbit (ungerade) und ein Stoppbit. Für jedes 16-Bit-Datenwort wird das niedrigstwertige Byte zuerst übertragen, gefolgt von dem höchstwertigen Byte . Integer- und Gleitkomma-Datentypen, die aus mehr als einem Wort bestehen, werden von dem Wort mit der niedrigsten Nummer an das Wort mit der höchsten Nummer übertragen. Die einzige Ausnahme von dieser Regel ist die Zeit , die in den Wörtern 6-9 jeder HV-Ausgangsmeldung ausgegeben wird. Die vier 1612-Bit-Datenwörter sind in der folgenden Reihenfolge: 2,1,4,3, wobei 1 das höchstwertige Wort und 4 das niederwertigste Wort darstellt. Jedes Wort wird separat byteweise umgekehrt.
Wenn Sie eine andere Sprache beherrschen (wie Matlab oder C), würde ich immer noch gerne ein Beispiel Codeausschnitt sehen, der diese Daten lesen würde. Dies würde mir helfen zu verstehen, wie man es besser in Python lesen kann. – Nick
Hoffentlich wird jemand anderes Ihnen bessere Informationen geben, aber das Modul https://docs.python.org/2/library/struct.html ist, wo Sie nach Binärdatei-E/A suchen. Ich habe es nur einmal für eine kurze Zeit benutzt, daher kann ich nicht viel mehr helfen. –
@JLPeyret yeah Ich habe mich mit struct beschäftigt.Entpacke Varianten und einen Hex-Editor den ganzen Tag, um vernünftige Werte daraus zu erhalten, aber habe nicht den richtigen Weg gefunden, die MSB/LSB-Struktur zu lesen. Obwohl ich in der Lage war, einige der anderen Felder auf diese Weise zu lesen. – Nick