Einzelnen Beitrag anzeigen

OlliWW

Registriert seit: 31. Aug 2011
159 Beiträge
 
#1

Temperaturwert in Double umwandeln

  Alt 26. Jan 2022, 10:21
Delphi-Version: 5
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?
  Mit Zitat antworten Zitat