aus zwei Bytes ein Zahl einlesen
-
Hallo Leute,
ich habe in einem Char charWert[0] = 7 und in char Wert [1] = 79
so die beiden Zahlen sind Hexadecimal und ich würde gerne das ergebnis für
Hexadecimal 779 ausrechen und es in einem neuen variablen speichern
also int intWert;
also 779 ist decimal 1913 ich würde gerne in meinem intWert =1913 haben
-
Probier mal mit ::memcpy(). Weiß allerdings nicht ob der int die Zeichen als hexadezimal anerkennt. Ansonsten vorher von Hex zu ASCII konvertieren.

-
Das Prinzip des Stellenverschiebens ist im Hexadezimalsystem auch nicht anders als im Dezimalsystem. Um eine Stelle nach rechts zu verschieben, musst du mit 16 multiplizieren, bei zwei Stellen mit 16²...
Um die Anzahl der Stellen von Wert[1] herauszubekommen, kannst du den Logarithmus verwenden.
-
int intWert = (charWert[0] << 8) | charWert[1];
-
danke,
intWert= (charWert[0]<<8)|charWert[1];
das funktioniert mein probelm ist aber das ich in charWert [1] = -70 stehen habe es sollte aber BA stehen. Kannst du mir vielleicht auch sagen wie ich dieses Problem umgehe
-
Hexadezimal ist nichts anderes als eine interpretatiton. Wenn du es dir als Hex anzeigen läst kommt da schon BA raus.
-
borhan schrieb:
Hallo Leute,
ich habe in einem Char charWert[0] = 7 und in char Wert [1] = 79
so die beiden Zahlen sind Hexadecimal"hexadezimal" ist keine Eigenschaft einer Zahl wie "gerade" und "ungerade". Das Hexadezimalsystem ist eine Art der Darstellung von Zahlen.
borhan schrieb:
Registrierter Troll schrieb:
int intWert = (charWert[0] << 8) | charWert[1];danke,
intWert= (charWert[0]<<8)|charWert[1];
das funktioniert mein probelm ist aber das ich in charWert [1] = -70 stehen habe es sollte aber BA stehen. Kannst du mir vielleicht auch sagen wie ich dieses Problem umgeheDiese Bitfrickelei auf vorzeichenbehafteten Zahlen sollte man meist sein lassen. Man muss auch daran denken, dass man nie direkt mit char- und short-Typen rechnet, sondern dass immer eine Konvertierung zu int oder unsigned int stattfindet ("promotion").
Soll das Ergebnis denn eine vorzeichenlose Zahl im Bereich [0,65536) sein? INT_MAX kann nämlich auch kleiner als 65535 sein.
Versuch das hier:
unsigned char const* p = reinterpret_cast<unsigned char const*>(charWert); unsigned int intWert = (unsigned(p[0]) << 8) | p[1];(unter der Annahme, dass charWert ein Array oder ein Zeiger ist)
Ein
#include <climits> #if CHAR_BIT !=8 #error "CHAR_BIT != 8" #endifkönnte auch nützlich sein.
Gruß,
SP
-
es funktioniert danke