Dezimal in Hexadezimal

und bei mir will ers nicht starten weil er kein MSVCP71 finden kann!

Pls gib mir den Code ich flehe dich an! AM Montag hab ich Test und ich sitz schon solang dran! Ich flehe dich an *bettel*
 
Andreas703 hat gesagt.:
Hy Leute!
Diese Form sollte es auch beibehalten da ich noch nicht allzuviele andere Befehle kenne!
Ich kann erst die paar und sowas wie Switch,for,if, und ja das wars auch schon im großen und ganzen! Außer eben dem was da in dem noch drinsteht!

Aber Arrays (insbesondere Char Arrays) hattet ihr schon? Denn die wären für ne Lösung (zumindest eine einfache) nötig.


13677:16=854 Rest 13
854:16=53 Rest 6
53:16=3 Rest 5
3:16=0 Rest 3

Jetzt nimmt man die Zahlen, die als Rest übrig geblieben sind und zwar in der Reihenfolge von unten nach oben und erhält in diesem Beispiel als Ergebnis 3 5 6 13. Diese Zeichen werden einfach hintereinander weggeschrieben, wobei allerdings die Zahlen von 10 bis 15 nochmals umgesetzt werden müssen; und zwar:
10 als A,
11 als B,
12 als C,
13 als D,
14 als E und
15 als F.


Genau so machst dus. Du teils die Zahlen durcheinander, den Rest speichers du gleich in Umgewandelter Form (z.B. durch ein switch Konstrukt )in nem Char Array.
Die Zahlen teilst du so oft durcheinander, bis das Ergebniss Null ist. Dann gibst du das Array in umgekehrter Reihenfolge aus.
 
Zuletzt bearbeitet:
moin


Meine güte du Nervbold, hier hast ihn:
Code:
int main()
{
	int zahl	=0;
	int reste[10];
	int zaehler	=0;
	int neu		=0;

	cout<< "Hex 2 Dez Umrechner von umbrasaxum\n";
	cout<< "Dez: ";
	cin>> zahl;

	neu = zahl;

	do
	{
		reste[zaehler++] = neu % 16;
		neu /= 16;
	}
	while(neu != 0);

	cout<<"Hex: ";

	for(int l=zaehler-1; l>-1; l--)
	{
		switch(reste[l])
		{
		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<< reste[l];
		}
	}

	return 0;
}

Ich würde fast behaupten das man das nicht einfacher machen kann!


mfg
umbrasaxum
 
Hallo an alle,

ich habe da so ein Problem, wenn ich die Hexadezimalzahl nicht am Bildschirm ausgeben will, wie oben beschrieben, sondern in einer Variablen speichern, um sie dann später verwenden zu können. Ich habe versucht den Code von oben zu verändern, aber irgendwie gehts net. Kann mir bitte jemand weiter helfen?

Code:
#include <iostream>

    using namespace std;

    int compare(char, int, int, int); 
    char hex(char);
    int a,M,t;
    char v;
    
    int main()
    {      
      compare(31, 10, 30, 20);
      
      cin.get();
    }

    int compare(char v1, int a1, int M1, int t1) 
    {      
      char x;  
      v = v1;
      a = a1;
      M = M1;
      t = t1;
      x = hex(v);
      
     }

    char hex(char v2)
    {
            int zahl =0;
	    char reste[10];
	    int zaehler =0;
	    int neu	=0;

	    zahl = v2;
	    neu = zahl;
        
	    do
	    {
                reste[zaehler++] = neu % 16;
                neu /= 16;
             }while(neu != 0);
        
	    for(int l=zaehler-1; l>-1; l--)
	    {
                        switch(reste[l])
		     {
                           case 10: reste[l] = 'A'; break;                 
		         case 11: reste[l] = 'B'; break;
		         case 12: reste[l] = 'C'; break;
		         case 13: reste[l] = 'D'; break;
		         case 14: reste[l] = 'E'; break;
		         case 15: reste[l] = 'F'; break;		         
		     }
        }   
        return (char)reste;
     }
 
Zuletzt bearbeitet von einem Moderator:
Hi.
Hallo an alle,

ich habe da so ein Problem, wenn ich die Hexadezimalzahl nicht am Bildschirm ausgeben will, wie oben beschrieben, sondern in einer Variablen speichern, um sie dann später verwenden zu können. Ich habe versucht den Code von oben zu verändern, aber irgendwie gehts net. Kann mir bitte jemand weiter helfen?

Code:
#include <iostream>

    using namespace std;

    int compare(char, int, int, int); 
    char hex(char);
    int a,M,t;
    char v;
    
    int main()
    {      
      compare(31, 10, 30, 20);
      
      cin.get();
    }

    int compare(char v1, int a1, int M1, int t1) 
    {      
      char x;  
      v = v1;
      a = a1;
      M = M1;
      t = t1;
      x = hex(v);
      
     }

    char hex(char v2)
    {
            int zahl =0;
	    char reste[10];
	    int zaehler =0;
	    int neu	=0;

	    zahl = v2;
	    neu = zahl;
        
	    do
	    {
                reste[zaehler++] = neu % 16;
                neu /= 16;
             }while(neu != 0);
        
	    for(int l=zaehler-1; l>-1; l--)
	    {
                        switch(reste[l])
		     {
                           case 10: reste[l] = 'A'; break;                 
		         case 11: reste[l] = 'B'; break;
		         case 12: reste[l] = 'C'; break;
		         case 13: reste[l] = 'D'; break;
		         case 14: reste[l] = 'E'; break;
		         case 15: reste[l] = 'F'; break;		         
		     }
        }   
        return (char)reste;
     }
Also erstmal gibt es in deinem Code mehrere Probleme. Du kannst ein char-Array nicht als char zurückgeben. Ein Array welches nur lokal in der Funktion auf dem Stack angelegt wurde sowieso nicht.

Dann müßtest du bereits in der ersten Schleife die Werte von rechts nach links in das Array eintragen.

Verwende doch einfach die C Funktion sprintf:
C++:
#include <cstdio>

char ausg[20];
int zahl = 4999;

sprintf(ausg, "%X", zahl);

Gruß
 
Ich habe da eine Lösung zu wie du die Ausgabe in eine Variable machen kannst.

Ich weis der Beitrag hier ist veraltet auf den ich Antworte, aber ich selbst freu mich, wenn dann immer Lösungen dort stehen die Funktioeniern. Habe deine nicht ausprobiert.

Meine klappt wunderbar!

Also viel Spaß damit

Code:
void CGGABuild::dezTOhex(int idez){
    int iRest;
    int iQuotient;  
    CString sErgHex;

    CString sHex;
    
    do{

       iQuotient=(int)idez/16;
       iRest= idez%16;
       idez=iQuotient; //Zuweisung, das nicht immer mit dem Startwert gerrechnet wird
       if(iRest<10){
           sHex.Format(_T("%i"),iRest);
       }

       else{
        switch(iRest){
            case 10:
                sHex="A";
                break;
            case 11:
                sHex="B";
                break;
            case 12:
                sHex="C";
                break;
            case 13:
                sHex="D";
                break;
            case 14:
                sHex="E";
                break;
            case 15:
                sHex="F";
                break;
            }//ende switch
        
       }
    sErgHex= sHex+sErgHex; //Hexadezimalen String zusammenbauen
    }while(iQuotient!=0);

    sErgHex;

}
 
//hexadezimal.cpp Zahlen aus dem Zehnersystem in Hexadezimalzahlen umrechnen
#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
long dec;

cout << "Zahl im Zehnersystem: ";
cin >> dec;
printf("Zahl im Hexadezimalsystem: %x\n", dec);
return 0;
}
 
Zurück