Convert to a signed 8 Bit Value ???

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
DeaD_EyE
User
Beiträge: 1020
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Antwort steht hier bereits: viewtopic.php?f=1&t=45186#p342848
Das erklärt auch, die Formel. Die 256 stechen ins Auge. Ich lasse meine falsche Interpretation trotzdem mal stehen.

Richtig wäre:
K = High byte
L = Low byte
Endianess = Big Endian

ich hätte als Berechnung eher das erwartet:
K << 8 | L
ist aber das gleiche wie
K * 256 + L

__deets__ hat es richtig interpretiert, es handelt sich nicht um zwei Zahlen, sondern um einen signed short, big endian.
-------------------------------

K ist ein signed byte
L ist ein unsigned byte
Die Bytereihenfolge ist bei bytes belanglos.

Die Funktion zum Berechnen:

Code: Alles auswählen

def calc(hex_string):
    data = hex_string.replace(' ', '')[5:9] # Leerzeichen entfernen, Bereich auswählen
    k, l = struct.unpack('bB', binascii.a2b_hex(data)) # hex-string -> bytes -> integer 
    return (k * 256 + l) / 10
Wenn das dein String ist: "7EC21 FF C7 0F B8 10 0E 0E",
musst du zuerst die Leerzeichen entfernen, sonst wirft binascii.a2b_hex einen ValueError.
Die Funktion a2b_hex wandelt den bearbeiteten hex-string in bytes um.
Die Funktion struct.unpack wird verwendet, um C-Datentypen aus Bytes zu interpretieren.
Zuerst wird ein signed byte erwartet und direkt danach ein unsigned byte.

Der Unterschied ist, dass ein signed byte Werte von -128 bis +127 annehmen kann.
Ein unsigned byte von 0 bis 255.

Das könnte auch als Anhaltspunkt dienen, um die Formel etwas besser zu verstehen.

z.B. ergibt -128 * 256 == -32768 == -2**15
Ich vermute mal, dass der Faktor K einen größeren Wertebereich abbilden soll, die Genauigkeit aber nicht so wichtig ist. L ist nur ein Offset. Der Teiler 10 kommt z.B. vor, wenn es sich um eine logarithmische Einheiten wie z.B. dBV oder nur um das logarithmische Verhältnis dB handelt.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten