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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.