Dezimal in Hexa konvertieren
-
Hallo,
wie ihr unschwer am Titel meines beitrags erkennen könnt, bekomme ich es nicht hin eine dezimal zahl in eine Hexa umzurechnen...soll einen kleinen zahlenkonverter für die schule programmieren.
Von dezi in bin und Hex.....bin hab ich, Hexa weiss nicht recht wo ich anfangen soll.
Bitte keine codes...wenn möglich hätte ich gern anregungen, programmieren möchte ich es ja selbst.Vielen dank im voraus
nxer
-
Du kannst eine Variable in Hex-form mittels den Iomanipulatoren ausgeben lassen.
Suche am besten mal nach iomanip
-
Und für die Darstellung in Bits suche nach bitset
-
Hi!
Das Ausgeben in hex wird vermutlich nicht genügen, zumindest nicht der Schule. Hier einfach mal ein Lösungsvorschlag:
Binär->Hexadezimal:
Du musst die Binärzahl von rechts angefangen in 4-Tupel einteilen und danach jedem 4-Tupel die entsprechende Hexziffer schreiben.Code-Hacker
-
sorry...was nicht so ganz was ihr meint....programmiere noch nicht all zu lang(1/4 Jahr), ich würde mich freuen wenn ihr mir das mal erklären könntet!
@ Code-Hacker...ja richtig erkannt ich soll berechnen...vielen dank schon mal für dein Vorschlag, aber ich soll von dezimal in Hexa umrechnen...
-
hatte mir überlegt meine dezimalzahl solange durch 16 zu teilen bis sie null ist und mein rest ist meine Hex zahl...doch ich weiss nicht wie ich mein rest auslese...falls es überhaupt geht!
-
Also wenn du nicht deine eigenen Algorithmus schreiben musst um deine Variable in Hex-form aus zu geben, würde ich dir wirklich die iomanip Variante empfehlen.
-
Binäzahl sieht z.B. so aus:
10 1101 1011 0010 1110 0011
Dies in 4-Tupel unterteilt (beginnend bei rechts) sieht so aus:
10|1101|1011|0010|1110|0011
Die Buchstaben bzw. Zahlen sind:10|1101|1011|0010|1110|0011 2 D B 2 E 3
Du müsstest dir nur eine Tabelle schreiben und zu jeder Binärzahl den entsprechenden Buchstaben bzw. Zahl dir holen. Man könnte ein Array benutzen wo die Zahlen/Zeichen 0-F gespeichert sind und man greift per Index darauf zu. Also wird jedes 4-Tupel in Dezimalzahl umgewandelt und per Index darauf zugegriffen:
int x = bin2dez("0011"); result.insert(0, hexArray[x]); // result ist vom Typ String
hexArray ist vom Typ const char[16] und wird mit "0123456789ABCDEF" initialisiert. der jeweilige Buchstabe wird immer vorne angefügt.
Code-Hacker
-
Hi!
Sorry, habe deinen Edit zu spät gelesen. Aber man könnte ja auch nach Binär umwandeln und jedes 4-Tupel nach Dezimal zurückwandeln. Ist kompliziert, sollte aber funktionieren.
Den rest bekommst du mittels Modulooperator %:x = 10 % 3; // x == 1, da 10:3 = 3 Rest 1;
Ich glaube irgendwie auch das das die leichtere Variante ist. Das andere habe ich nur von einem Zettel abgelesen den ich mal im Internet gefunden habe wo solche Umrechnungen draufstehen. *G*
Code-Hacker
-
@ Code-Hacker...danke schon mal für deine Hilfe...verstehe zwar was du meinst, weiss allerdings im moment nicht wie ich es als Algorithmus aufsetzten soll
...steh irgendwie auf dem schlauch...OK...ich werde es mal versuchen...aber kannst du mir noch beantworten wie auf den Rest zugreife....
in deinem beispiel
x = 10 % 3; // x == 1, da 10:3 = 3 Rest 1;
die 1
-
ja, auf die 1 greifst du zu, indem du x nimmst.
-
Hi!
Ich habe das mal eben geschrieben und es funktioniert:
const char hexArray[17] = "0123456789ABCDEF"; // Alle Zeichen die eine Hexzahl enthalten kann std::string str; // Hexzahl speichern int x=20; // als Parameter zu übergeben; enthält die Zahl umzuwandelne Dezimalzahl int y; // Variable für den Rest while(x) // Laufe solange x ungleich 0 { y = x % 16; // Modulo 16, Rest nach y x /= 16; // x teilen durch 16, ergebnis wieder nach x str.insert(0, hexArray[y]); // Zahl/Ziffer aus Array holen und an den Anfang anfügen } std::cout << str;
Code-Hacker
-
vielen dank schon, werd mich dann probieren...wenn ich schwierigkeiten haben sollte melde ich mich!
nxer
-
10|1101|1011|0010|1110|0011 3 D B 2 E 3
Warum ist den 3 in dez == 10 in hex?
10 ist doch 2.
-
Hi!
Sorry, Tippfehler. Auf dem Zettel stehts richtig. Habs korrigiert.
EDIT: du meinst 10 in BinCode-Hacker