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 ($) verwechseltEdit2->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.