Ich bin absolut schockiert und fassungslos und nicht ein bisschen erstaunt über die ganze Waffel wie "Sie haben Buchstaben wie hh, die nicht Teil einer hex Zahl sein sollten" und "sie scheinen anfangen, Sinn direkt am zuerst \ x7f ". Hat noch niemand einen Ausgang repr()
gesehen?
Die folgenden zeigt, wie es so geendet oben könnte, die \xff
ignorieren, die nur Rauschen zu sein scheint:
>>> guff = open('your_file.bin', 'rb').read()
>>> cleaned = guff.replace("\xff", "")
>>> cleaned
'ihhhhhhihhhhhhhhhhiiijjjjjjjkkkkkklllmmmnnnonnoopopppqqrqrsstttttuvvuuvvvvwwxwx
xyyyyzz{z{||}|~}}}~~~~~\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x80\x80\x80\x81\x81\x80\x81\
x81\x81\x82\x82\x82\x82\x82\x82\x83\x83\x83\x83\x83\x83\x84\x83\x84\x84\x85\x85\
x85\x86\x85\x86\x87\x87\x87\x87\x87\x88\x87\x88\x89\x88\x89\x89\x8a\x89\x8a\x8a\
x8b\x8b\x8b\x8b\x8c\x8d\x8d\x8d\x8d\x8e\x8e\x8e\x8f\x8f\x8f'
# Note that lines wrap at column 80 in a Windows "Command Prompt" window ...
>>> pressure = [ord(c) for c in cleaned]
>>> pressure
[105, 104, 104, 104, 104, 104, 104, 105, 104, 104, 104, 104, 104, 104, 104, 104,
104, 104, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107,
107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 110, 110, 111, 111,
112, 111, 112, 112, 112, 113, 113, 114, 113, 114, 115, 115, 116, 116, 116, 116,
116, 117, 118, 118, 117, 117, 118, 118, 118, 118, 119, 119, 120, 119, 120, 120,
121, 121, 121, 121, 122, 122, 123, 122, 123, 124, 124, 125, 124, 126, 125, 125,
125, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128,
129, 129, 128, 129, 129, 129, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131,
131, 131, 132, 131, 132, 132, 133, 133, 133, 134, 133, 134, 135, 135, 135, 135,
135, 136, 135, 136, 137, 136, 137, 137, 138, 137, 138, 138, 139, 139, 139, 139,
140, 141, 141, 141, 141, 142, 142, 142, 143, 143, 143]
>>>
Sie: aus der Datei Arbeits zurück
>>> pressure = [120,121,122,123,124,125,126,127,128,129,130,131]
>>> import struct
>>> some_bytes = struct.pack("12B", *pressure)
>>> print repr(some_bytes)
'xyz{|}~\x7f\x80\x81\x82\x83'
>>>
So wollen wir versuchen, Ich muss immer noch die Dokumente für das Gerät lesen, um herauszufinden, was der Skalierungsfaktor ist, um diese 0-254-Werte zu multiplizieren.
Sie werden feststellen, dass sich die abgeleiteten Zahlen jedes Mal um +1, 0 oder -1 ändern. Dies passt gut zu einer Hypothese, dass es nur 1 Byte pro Lesevorgang statt zwei oder mehr Bytes pro Lesevorgang ist.
Ein anderer Gedanke: vielleicht ist die \xff
ein Start oder Ende Sentinel, und es gibt zwei Werte (Start, Stopp) oder (Sensor-A, Sensor-B) wird jeden Zyklus gemeldet.
Dies ist interessant, weil sie gleich beim ersten Sinn Sinn machen scheinen. Meine Vermutung wäre, dass Sie sich das in einem Editor ansehen, der einige Binärdateien in Zeichen außerhalb des Hexbereiches übersetzt (~ Tilde zum Beispiel ist kein Hexadezimalzeichen). Können Sie uns den Speicherauszug eines tatsächlichen Hex-Editors zeigen, einen Link zu der Datei anzeigen oder das Dateiformat ermitteln, aber in der Dokumentation des verwendeten Geräts nachsehen? – marr75
Könnte 3 Bytes pro Beispiel sein, mit dem mittleren Byte immer 255 aus irgendeinem Grund. Von welchem Gerät stammen die Daten? –
Großartig! Ich bin auf diese Frage gekommen, weil ich die Kalibrierdatei ('.cal3') eines FootWork Drucksensors hacken möchte. Kleine Welt! – heltonbiker