hex nach dezimal



  • hi

    könnte mir vllt jamdn aml helfen bei folgedem code?

    String rest=Edit11->Text;
    	int erg=0;
    	int a=1;
    
    	for(int x=1;x<=rest.Length();x++)
    	{
    		//Ausgabe
    		if(rest[x]=='A') erg+=10*(1*a);
    			else if(rest[x]=='B') erg+=11*(1*a);
    				else if(rest[x]=='C') erg+=12*(1*a);
    				   else if(rest[x]=='C') erg+=13*(1*a);
    					   else if(rest[x]=='D') erg+=14*(1*a);
    						  else if(rest[x]=='E') erg+=15*(1*a);
    							 else if(rest[x]=='F') erg+=16*(1*a);
    								else
    								   erg+=rest[x]*(1*a);
    
    								   if(a>1) a*=16;
    
    	}
    
    	 Edit12->Text=erg;
    

    es soll eine infache umrechnung von hex nach dezimal sein nur leide rkomemn da viel zu wirre zahlen raus? 😞



  • Edit2->Text = String (("$" + Edit1->Text).ToInt ());
    


  • hi,

    leider hat das nichts bewirkt 😞

    hat jemand naders vllt nen rat?

    Also als beisopiel soll bei der HEX: "11C" als dezimal 284 rauskommen



  • else if(rest[x]=='C') erg+=12*(1*a);
         else if(rest[x]=='C') erg+=13*(1*a);
    

    Du hast das C doppelt.

    A - 10
    B - 11
    C - 12
    D - 13
    E - 14
    F - 15 ( bei dir steht da ne 16 )



  • nutze vielleicht die zauberhafte eigenschaft des ascii-codes, daß die zeichen 'A' bis 'F' lückenlos hintereinander stehen.
    ich hab mal kurz versucht, deinen ursprünglichen code dahingehend umzusetzen. vielleicht erlaubt das, den fehler schneller zu finden.

    String rest=Edit11->Text;
    	int erg=0;
    	int a=1;
    	for(int x=1;x<=rest.Length();x++)
    	{
    		if(''A'<=rest[x] and rest[x]<='F')
    			erg+=(10+(rest[x]-'A'))*(1*a);
    		else
    			erg+=rest[x]*(1*a);
    		if(a>1) a*=16;
    	}
    	Edit12->Text=erg;
    


  • volkard schrieb:

    nutze vielleicht die zauberhafte eigenschaft des ascii-codes, daß die zeichen 'A' bis 'F' lückenlos hintereinander stehen.
    ich hab mal kurz versucht, deinen ursprünglichen code dahingehend umzusetzen. vielleicht erlaubt das, den fehler schneller zu finden.

    String rest=Edit11->Text;
    	int erg=0;
    	int a=1;
    	for(int x=1;x<=rest.Length();x++)
    	{
    		if(''A'<=rest[x] and rest[x]<='F')
    			erg+=(10+(rest[x]-'A'))*(1*a);
    		else
    			erg+=rest[x]*(1*a);
    		if(a>1) a*=16;
    	}
    	Edit12->Text=erg;
    

    Lieber Volkard, du hast ja keine Ahnung. Gib Dir doch mal mehr Mühe.

    String rest=Edit11->Text;
    	int erg=0;
    	for(int x=0;x<rest.Length();x++)//<= ist doch falsch
    	{
    		if(rest[x]<='9')
    			erg=erg*16+(rest[x]-'0')
    		else
    			erg=erg*16+(rest[x]-'A'+10)
    	}
    	Edit12->Text=erg;
    


  • warum einfach, wenn es umständlich geht lol.
    audacia hat schon recht, hat wahrscheinlich nur das Zeichen ($) verwechselt

    Edit2->Text = ("0x" + Edit1->Text).ToInt();
    


  • volkard schrieb:

    Lieber Volkard, du hast ja keine Ahnung.

    Insofern richtig, als daß der Typ String das C++-Pendant zu Delphis String-Typ ist und aus historischen Gründen ab 1 indiziert wird (als Strings in Turbo Pascal und bis Delphi 1 noch auf 255 Zeichen begrenzt waren, stand im ersten Byte die Länge des Strings).

    OldMan00 schrieb:

    audacia hat schon recht, hat wahrscheinlich nur das Zeichen ($) verwechselt

    $ ist das in Delphi gebräuchliche Präfix für Hexadezimalzahlen und funktioniert ebensogut wie 0x.



  • upps natte mich vertippt vorhin. das klappt wirklich...

    hmm nur .. warum klappt das??? 😮



  • audacia schrieb:

    $ ist das in Delphi gebräuchliche Präfix für Hexadezimalzahlen und funktioniert ebensogut wie 0x.

    sorry, stimmt jetzt wo Du es sagst, ich benutze halt immer 0x.



  • ich würd auch gern mal wissen warum das funktioniert 🙂

    besonders logisch ist das ja nicht unbedingt ^^



  • Chiyo schrieb:

    hmm nur .. warum klappt das??? 😮

    String::ToInt() erkennt die entsprechenden Präfixe und betrachtet die Zahl demgemäß als Hexadezimalzahl.


Anmelden zum Antworten