Zweierkomplement zurückwandeln?
-
Hallöchen,
*seufz* immer diese Programmier-Probleme *g*Folgendes:
Per I²C bekomme ich einen Temperaturwert z.B. -25 Grad was dann ja (Zweierkomplement bei negativer Temperatur) 11100111 bzw. E7h wäre.So, diese Zahl möchte ich jetzt umwandeln, in "Klartext", also in einer Variable soll nun -25 stehen
Ist das so korrekt, oder sollte man es so lieber nicht machen, sondern anders (wie??)
Klartextvariable = ~(Variable des Typs uchar)+1;
-
Wieder ein Fall von unklarer Aufgabenstellung ...
Du bekommst von dem Fühler das Bitmuster 11100111, das Du in eine unsigned-char-Variable stopfst, hab ich das bis dahin richtig kapiert? Jetzt möchtest Du im eine signed-char-Variable mit dem zugehörigen Wert belegen, oder? Wenn Du dich auf einem Zweierkomplementsystem befindest, dann entspricht 11100111 aber doch genau dem Bitmuster, das als 'signed char' interpretiert, -25 ergibt. Sollten das die Voraussetzungen sein, dann mußt Du doch gar nichts umrechnen ...
-
Ganz genau!
Bloss diesen Hexwert den ich ja verpackt in einer uChar-Variable bekomme, den möchte ich halt in einer Variable (Typ..gute Frage!) haben, damit ich den konkreten Wert (z.B. -25) anzeigen kann, sowie diesen auch mit diesen vergleichen bzw. rechnen kann.
-
PeeDee schrieb:
Ganz genau!
Bloss diesen Hexwert den ich ja verpackt in einer uChar-Variable bekomme, den möchte ich halt in einer Variable (Typ..gute Frage!) haben, damit ich den konkreten Wert (z.B. -25) anzeigen kann, sowie diesen auch mit diesen vergleichen bzw. rechnen kann.Die 'übliche' Variante wäre einfach:
int temp = (signed char)temp_uc;Der Cast ist dafür da, bewußt den Überlauf im signed-char-Bereich zu erzwingen. Nicht ganz sauber, aber sei's drum.
-
Okay, ich probiers morgen mal aus und werde mich auf jeden Fall hier nochmal zu Worte melden
-
Also ich muss sagen, es funzt!
Danke!
Ich dachte schon wieder viel zu kompliziert, so vonwegen Bit-Operationen und so.....