Hex nach Dezimal



  • Hallo ich versuche gerade eine Programm zu schreiben welches eine Hexzahl in eine Dezimalzahl umrechnet.

    Die Hex Zahl 21 ist Dezimal = 33

    ( Bei mir muss ich im Array eingeben {1,2} weil die zahlen ja Rückwärts berechnet werden müssen das man die Zahlen richtig eingeben kann hab ich noch nicht eingebaut )

    Also wenn in

    int ar [] = {1,2}
    

    steht dann bekomme ich als Ergebniss ausgeben: 33 das ist ja richtig.

    Wenn in

    int ar [] = {1,2,3}  ( Also Hexzahl 123 )
    

    steht dann bekomme ich als Ergebniss ausgeben: 801 das ist ja richtig.

    Aber jetzt wird seltsam:

    int ar [] = {1,2,3,4}
    

    Ergebniss: 17184
    Das ist falsch das richtige Ergebniss wäre: 17185

    int ar [] = {1,2,3,4,5}
    

    Ergebniss: 344832
    Wieder falsch das richtige Ergebniss wäre: 344865

    Wieso rechnet mein Programm falsch wenn im Array mehr als 3 Zahlen stehen ?
    Ich versteh das nicht was ist an meinem Programm falsch ?

    #include <iostream>
    #include <sstream>
    using namespace std;
    
    int main()
    {
    int j;
    
    long v= 16 ;
    int erg[40];
    
    int ar [] = {1,2,3};  // 321 dez = 801 hex
    							  // zahl muss noch rückwärts
    							 // eingelesen werden
    
    long long e= 1 ;
    unsigned long long n=0;
    
    cout<<"size:" << sizeof( ar )/4  << endl;
    
    	erg[0] = ar[0] * 1;
    
    		for ( unsigned int i=1; i < sizeof(ar) / 4  ;i++)
    		{
    			  e = 16 * e ;
    			  erg[i] = ( e * ar[i] ) ;
    
    		}
    
    	 for ( n=0; n < ( sizeof(ar)/4) - 2  ;n ++)
    	 {
    			  erg[0] = erg[ n ] + erg[n+1] ;
    	 }
    
    	erg[0] = erg[0] + erg[n+1];
    	cout<< erg [0]<<endl;
    
    system("PAUSE");
    }
    


  • Wenn du die Zahlen nur ausgeben willst, könntest du das ganze einfacher über Streammanipulatoren lösen. 🙂

    #include <iostream>
    #include <iomanip>
    
    int main()
    {
        std::cout << "Gib eine Dezimalzahl ein" << std::endl;
        int number;
        std::cin >> number;
        std::cout << number << " ist hexadezimal " << std::hex << number << std::endl;
    }
    


  • Das weiss ich das dass geht aber ich will selber einen Algorithmus schreiben.
    Ich will halt wissen wie es funktioniert.



  • Was ein Debugger ist weißt du? Und wie er funktioniert auch? Dann schau dir einfach die Zwischenergebnisse an und vergleiche sie mit deinen auf dem Papier berechneten Ergebnissen. Für das Verständnis wäre es auch nicht schlecht, den Algorithmus mit dem auf deinem Papier zu vergleichen.



  • #include <iostream>
    #include <iomanip>
    
    int main()
    {
        std::cout << "Gib eine Dezimalzahl ein" << std::endl;
        int number;
        std::cin >> number;
    
        std::string hexa;
        while(number)
        {
            int tmp = number % 16;
            hexa = static_cast<char>(tmp < 10 ? tmp + '0' : tmp - 10 + 'a') + hexa;
            number /= 16;
        }
        std::cout << hexa << std::endl;
    }
    

    Vielleicht hilft dir ja meine Lösung weiter, jedenfalls ist es nicht ratsam, mit Arrays zu arbeiten 😉


  • Mod

    QQ schrieb:

    Ich will halt wissen wie es funktioniert.

    for ( n=0; n < ( sizeof(ar)/4) - 2  ;n ++)
         {
                  erg[0] = erg[ n ] + erg[n+1] ;
         }
    

    Das in der Schleife solltest du dir nochmal angucken.

    Das weiss ich das dass geht aber ich will selber einen Algorithmus schreiben.

    Dein Algorithmus ist bis auf obigen Fehler zwar richtig, aber ungeheuer umständlich. Und dein Stil ist sehr sehr schwer zu lesen und fehleranfällig. Das kannst du bestimmt besser, dann findet man auch solche Fehler schneller.



  • sizeof(ar)/sizeof(ar[0])
    

    ist sicher(er) und sollte auch so benutzt werden.

    Der Rest ist Restwertdivision.


Anmelden zum Antworten