Forum: Offtopic Interpretation HEX Wert


von Filth _. (filth)


Lesenswert?

Hi,

ich versuche gerade ein Format zu verstehen. Es handelt sich um 
OpenTherm Nachrichten. Ich habe ein Tool, was die Nachrichten übersetzt. 
Die Codierung verstehe ich aber nur teilweise:

Ankommende Nachricht:
C0192B20 - Übersetzt zu => ID: 25, Wert: 43.13
401F1FDC - Übersetzt zu => ID: 31, Wert: 31.86

Was ich rausgefunden habe:
Stelle 3+4 codiert die id hexdezimal. Also 19 = 25, 1F = 31.
Stelle 5+6 codiert die Zahl vor dem Komma. Also 2B = 43, 1F = 31.

Wo und wie wird aber die Nachkommazahl kodiert? Kann mir wer helfen?

Danke

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Rechne den Wert in Dezimal um und teile ihn durch 256.

von Filth _. (filth)


Lesenswert?

Wollte es gerade schreiben - habe die Stelle im Quellcode nachgeguckt:
1
proc float {val} {
2
    if {$val & 0x8000} {set val [expr {$val - 65536}]}
3
    return [format %.2f [expr {$val / 256.}]]
4
}

Warum wird denn durch 256 geteilt? Was genau soll der Ausdruck in der 
if-Bedingung bewirken?

Danke

von Roland E. (roland0815)


Lesenswert?

Filth __ schrieb:
> ...
>
> Warum wird denn durch 256 geteilt? ...

Weil eine Division durch 2^x für Binärrechner deutlich einfacher ist, 
als durch 10^x.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Filth __ schrieb:
> Was genau soll der Ausdruck in der if-Bedingung bewirken?

Da werden negative Zahlen (16-Bit-Zweierkomplementdarstellung)
behandelt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.