Hallo,
Ich suche gerade einen einfachen Weg mit Delphi einen Temperaturwert, der über eine Schnittstelle kommt, in einen Double umzuwandeln.
Gesendet wird er in 2 Byte Werten, hier ein Beispiel:
LowerByte: $50
HigherByte: $05
Als Ergebnis müsste rauskommen: +5,3125°C.
Berechnet wird das im Zweikomplement:
Higherbyte:
bit7: sign (also Positiv oder Negativ)
bit6: 64 °C.
bit5: 32 °C.
bit4: 16 °C.
bit3: 8 °C.
bit2: 4 °C.
bit1: 2 °C.
bit0: 1 °C.
Für: $05 kommt 5 (Grad Celsius) raus
LowerByte:
bit7: 1/2 °C.
bit6: 1/4 °C.
bit5: 1/8 °C.
bit4: 1/16 °C.
bit3-0: keine Bewertung
Für $50 kommt 0,3125 raus
zusammen addiert: 5,3125
Um das Higherbyte umzuwandeln habe ich bereits einen kurzen Weg gefunden:
Delphi-Quellcode:
iHigherByte: Integer;
sHigherByte: ShortInt absolute iHigherByte;
Weise ich iHigherByte nun $50 zu, wird dies korrekt umgewandelt. Aber irgendwie tue ich mich mit der Nachkommastelle schwer. Ich kann natürlich einen Loop schreiben und das händisch auswerten und addieren.
Gibt es dazu einen kürzeren Weg?