myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

C++ Hexa in Binär/Dezimal

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 15.01.12, 14:23   #1
flokuek
Anfänger
 
Registriert seit: Jun 2010
Beiträge: 17
Bedankt: 0
flokuek ist noch neu hier! | 0 Respekt Punkte
Standard 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
__________________
flokuek ist offline   Mit Zitat antworten
Ungelesen 15.01.12, 14:45   #2
7331
Erfahrener Newbie
 
Registriert seit: Apr 2010
Beiträge: 142
Bedankt: 140
7331 ist noch neu hier! | 0 Respekt Punkte
Standard

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.
7331 ist offline   Mit Zitat antworten
Ungelesen 15.01.12, 14:45   #3
germgerm
bla
 
Registriert seit: Mar 2010
Beiträge: 312
Bedankt: 302
germgerm ist noch neu hier! | 0 Respekt Punkte
Standard

[ 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.
germgerm ist offline   Mit Zitat antworten
Ungelesen 15.01.12, 15:15   #4
flokuek
Anfänger
 
Registriert seit: Jun 2010
Beiträge: 17
Bedankt: 0
flokuek ist noch neu hier! | 0 Respekt Punkte
Standard

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?
__________________
flokuek ist offline   Mit Zitat antworten
Ungelesen 15.01.12, 15:17   #5
germgerm
bla
 
Registriert seit: Mar 2010
Beiträge: 312
Bedankt: 302
germgerm ist noch neu hier! | 0 Respekt Punkte
Standard

Wie hast du deine anderen Umwandlungen gelöst?
germgerm ist offline   Mit Zitat antworten
Ungelesen 15.01.12, 15:28   #6
flokuek
Anfänger
 
Registriert seit: Jun 2010
Beiträge: 17
Bedankt: 0
flokuek ist noch neu hier! | 0 Respekt Punkte
Standard

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;
__________________
flokuek ist offline   Mit Zitat antworten
Ungelesen 15.01.12, 15:44   #7
germgerm
bla
 
Registriert seit: Mar 2010
Beiträge: 312
Bedankt: 302
germgerm ist noch neu hier! | 0 Respekt Punkte
Standard

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
germgerm ist offline   Mit Zitat antworten
Ungelesen 15.01.12, 15:56   #8
flokuek
Anfänger
 
Registriert seit: Jun 2010
Beiträge: 17
Bedankt: 0
flokuek ist noch neu hier! | 0 Respekt Punkte
Standard

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
__________________
flokuek ist offline   Mit Zitat antworten
Ungelesen 15.01.12, 20:28   #9
Your_Conscience
Hinter dir!
 
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
Your_Conscience ist noch neu hier! | 0 Respekt Punkte
Standard

Zitat:
Zitat von flokuek Beitrag anzeigen
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");   
}
Your_Conscience ist offline   Mit Zitat antworten
Ungelesen 16.01.12, 15:21   #10
flokuek
Anfänger
 
Registriert seit: Jun 2010
Beiträge: 17
Bedankt: 0
flokuek ist noch neu hier! | 0 Respekt Punkte
Standard

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
__________________
flokuek ist offline   Mit Zitat antworten
Ungelesen 16.01.12, 16:29   #11
Your_Conscience
Hinter dir!
 
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
Your_Conscience ist noch neu hier! | 0 Respekt Punkte
Standard

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.
Your_Conscience ist offline   Mit Zitat antworten
Antwort


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

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:43 Uhr.


Sitemap

().