Ich bin mit einem Problem in Python konfrontiert und ich glaube, ich verstehe nicht, wie signierte Zahlen in Python behandelt werden. Meine Logik funktioniert in Java, wo alles signiert ist, also brauchen Sie Hilfe in Python.Konvertieren von Bytes in vorzeichenbehaftete Zahlen in Python
Ich habe einige Bytes, die in HEX codiert sind und ich muss sie entschlüsseln und sie zu Zahlen interpretieren. Das Protokoll ist definiert.
Sagen Sie die Eingabe wie folgt aussehen kann:
raw ‚016402570389FFCF008F1205DB2206CA‘ = Und ich so dekodieren:
bin_bytes = binascii.a2b_hex(raw)
lsb = bin_bytes[5] & 0xff
msb = bin_bytes[6] << 8
aNumber = int(lsb | msb)
print(" X: " + str(aNumber/4000.0))
von 4000,0 Nach dem Teilen, X in einem Bereich von -,000025 bis +0,25 sein kann.
Diese Logik funktioniert, wenn X im positiven Bereich ist. Wenn X negativ ist, bekomme ich eine positive Zahl zurück. Ich denke, dass ich "msb" nicht richtig handhabe, wenn es eine vorzeichenbehaftete Nummer ist. Wie handhabe ich handle negative vorzeichenbehaftete Nummer in Python?
Alle Tipps sehr geschätzt.
Sie können dazu das [struct module] (https://docs.python.org/3.6/library/struct.html) verwenden: mit der Funktion entpacken. –
Mögliches Duplikat von [Konvertiert ein Array variabler Größe in eine Ganzzahl/Länge] (https://stackoverflow.com/questions/25259947/convert-variable-sized-byte-array-to-a-integer-long) –
auch vielleicht https://stackoverflow.com/questions/1887506/convert-python-byte-to-unsigned8-bit-integer –