Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
15.01.12, 14:23
|
#1
|
Anfänger
Registriert seit: Jun 2010
Beiträge: 17
Bedankt: 0
|
C++ Hexa in Binär/Dezimal
Hey Leute,
ich bin gerade dabei einen Umrechner auf Konsolenbasis in C++ zu schreiben.
Es wirt dort ein Zahlensystem in ein anderes Zahlensystem umgewandelt.
Bisher habe ich Dezimal in Binär, Dezimal in Hexa, Binär in Dezimal und Binär in Hexa geschrieben.
Doch jetzt verzweifel ich irgendwie an Hexa zu Binär und Hexa zu Dezimal.
Hat wer irgendwelche Lösungsansätze oder kann mir in der Richtung weiter helfen?
Gruß
Flo
|
|
|
15.01.12, 14:45
|
#2
|
Erfahrener Newbie
Registriert seit: Apr 2010
Beiträge: 142
Bedankt: 140
|
Jedem Zeichen in Hexadezimal ist ein Vierblock aus 0er und 1er zugeordnet, wenn zu z.B. Hexa ein A liest, dann kannst du Binaer 1010 schreiben oder 0100 wenn eine 4 da war. So kannst du den ganzen Hexastring Zeichen fuer Zeichen durchgehen, bei Dez genau so. Bei Zahlen ist hier nichts zu zu tun, nur bei den Buchstaben wie A mit 10 ersetzen.
|
|
|
15.01.12, 14:45
|
#3
|
bla
Registriert seit: Mar 2010
Beiträge: 312
Bedankt: 302
|
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
Umwandlungen sind immer sehr ähnlich, ich denke, dass dein Binär zu Dezimal fast gleich sein sollte. Anstatt x0*2^0+x1*2^1+... wird halt x0*16^0+x1*16^1+... daraus.
|
|
|
15.01.12, 15:15
|
#4
|
Anfänger
Registriert seit: Jun 2010
Beiträge: 17
Bedankt: 0
|
Okay, Das habe ich nun verstanden
Nun scheitert es aber auch an der Umsetzung
Wie soll ich denn am besten anfangen?
Soll ich meine Zahl die Ich eingeben in ein Arrey eingelesen werden und dann die Zahl auslesen und wie oben beschrieben daraus die Dezimalzahl ziehen?
|
|
|
15.01.12, 15:17
|
#5
|
bla
Registriert seit: Mar 2010
Beiträge: 312
Bedankt: 302
|
Wie hast du deine anderen Umwandlungen gelöst?
|
|
|
15.01.12, 15:28
|
#6
|
Anfänger
Registriert seit: Jun 2010
Beiträge: 17
Bedankt: 0
|
So.
Code:
switch(auswahl)
{
case 1: {
cout << "\n\n Bitte geben Sie nun ihre Dezimalzahl ein.\n\n";
cout << " Eingabe: ";
cin >> dezimal_binaer;
cout << "\n Ergebnis: ";
for(i=15;i>=0;i--)
{
dezimal_binaer_ergebnis[i] = dezimal_binaer%2;
dezimal_binaer = dezimal_binaer/2;
}
for(i=0;i<=15;i++)
{
cout << dezimal_binaer_ergebnis[i];
}
cout << "\n\n\n";
}
break;
// _________________ Dezimal in Hexa ________________________________
case 2: {
cout << "\n\n Bitte geben Sie nun ihre Dezimalzahl ein.\n\n";
cout << " Eingabe: ";
cin >> dezimal_hexa;
cout << "\n Ergebnis: ";
neu = dezimal_hexa;
do
{
rest[zaehler++] = neu % 16;
neu /= 16;
}
while(neu != 0);
for(int i=zaehler-1; i>-1; i--)
{
switch(rest[i])
{
case 10: cout<<"A"; break;
case 11: cout<<"B"; break;
case 12: cout<<"C"; break;
case 13: cout<<"D"; break;
case 14: cout<<"E"; break;
case 15: cout<<"F"; break;
default: cout<< rest[i];
}
}
}
break;
// _________________ Binär in Dezimal _______________________________
case 3: {
cout << "\n\n Bitte geben Sie nun ihre Bin\x84 \brzahl ein.\n\n";
cout << " Eingabe: ";
cin >> binaer_dezimal;
cout << "\n Ergebnis: ";
laenge = binaer_dezimal.length();
for (i=0; i<laenge; i++)
{
binarray[i] = (int)binaer_dezimal[i]-48;
binaer_dezimal_ergebnis = binaer_dezimal_ergebnis + (binarray[i]*pot[i]);
}
cout << binaer_dezimal_ergebnis;
}
break;
// _________________ Dezimal in Hexa ________________________________
case 4: {
cout << "\n\n Bitte geben Sie nun ihre Bin\x84 \brzahl ein.\n\n";
cout << " Eingabe: ";
cin >> binaer_hexa;
cout << "\n Ergebnis: ";
laenge = binaer_hexa.length();
for (i=0; i<laenge; i++)
{
binarray[i] = (int)binaer_hexa[i]-48;
binaer_hexa_ergebnis = binaer_hexa_ergebnis + (binarray[i]*pot[i]);
}
neu = binaer_hexa_ergebnis;
do
{
rest[zaehler++] = neu % 16;
neu /= 16;
}
while(neu != 0);
for(int i=zaehler-1; i>-1; i--)
{
switch(rest[i])
{
case 10: {
cout<<"A";
}break;
case 11: {
cout<<"B";
}break;
case 12: {
cout<<"C";
}break;
case 13: {
cout<<"D";
}break;
case 14: {
cout<<"E";
}break;
case 15: {
cout<<"F";
}break;
default: {
cout<< rest[i];
}
}
}
}
break;
|
|
|
15.01.12, 15:44
|
#7
|
bla
Registriert seit: Mar 2010
Beiträge: 312
Bedankt: 302
|
Hex->Dez:
- Eingabe in einem String
- Von rechts nach links auswerten wie oben beschrieben.
x0*16^0 + x1*16^1
"1F"
F*16^0 + 1*16^1=
15*1 + 1*16=
31
|
|
|
15.01.12, 15:56
|
#8
|
Anfänger
Registriert seit: Jun 2010
Beiträge: 17
Bedankt: 0
|
mhhh irgendwie will es einfach nicht in meinen KOPF  (((
@germgerm
kannst du vielleicht ein Beispiel Code schreiben?
EDIT:
Kann mir vielleicht irgendwer anders bei dem Code helfen?????
Gruß
Flo
|
|
|
15.01.12, 20:28
|
#9
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
Zitat:
Zitat von flokuek
Kann mir vielleicht irgendwer anders bei dem Code helfen?????
|
Klar 
Hex -> Dez:
Code:
#include <iostream.h>
int main()
{
char hex[101];
for (int i = 0; i <= 100; i++) hex[i] = 'g';
bool k = false;
int p = 1, dez = 0;
cout << "Hexadezimale Zahl: ";
cin >> hex;
for (int i = 100; i >= 0; i--) {
if (!k) {if (hex[i] != 'g') k = true;}
else {
if (hex[i] >= 48 && hex[i] <= 57) dez += (int(hex[i]) - 48) * p; //Ziffer
else if (hex[i] >= 65 && hex[i] <= 70) dez += (int(hex[i]) - 55) * p; //großer Buchstabe
else if (hex[i] >= 97 && hex[i] <= 102) dez += (int(hex[i]) - 87) * p; //kleiner Buchstabe
else {
cout << "Falsche Eingabe: " << hex[i] << " ist unzulaessig!";
return 1;
}
p *= 16;
}
}
cout << dez << "\n";
system("PAUSE");
}
|
|
|
16.01.12, 15:21
|
#10
|
Anfänger
Registriert seit: Jun 2010
Beiträge: 17
Bedankt: 0
|
Cool, ich danke dir schoneinmal
Nur was ich noch nicht verstanden habe ist, was das mit der ersten for schleife auf sich hat und wie man das mit dem k = false verstehen soll.
sry mache c++ noch nicht sooo lange :P
|
|
|
16.01.12, 16:29
|
#11
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
Wir haben ja ein Array von 101 Chars (hex) wo noch nichts drin steht.
Ich habe den Array dann einfach mit g's gefüllt, damit man später sieht, wie viele Zeichen der Benutzer eingegeben hat.
Das 'k' ist einfach nur eine Hilfsvariable die am Anfang einfach mal auf false gesetz wird.
Später wird der hex-Array rückwärts durchlaufen, wobei bei jedem Zeichen überprüft wird, ob es sich um ein 'g' handelt oder nicht.
Wenn ja, wurde hier nichts vom Benutzer eingetragen und wenn nicht handelt es sich um eine Eingabe und die Berechnung des Dezimalwertes kann beginnen.
Also wenn k = true, dann muss gerechnet werden.
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:43 Uhr.
().
|