Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : aus char hex machen?



Jaipur
17-02-2003, 18:20
hi,

wie mache ich aus einem char: 'F' eine hex zahl F (15) ?
außer das ich zuerst gucken muss ob das char zwischen 0-9 bzw A-F liegt
und dann noch die '0' bzw die '7' abziehen muss?

ReSeT
18-02-2003, 08:52
In welcher Sprache soll das denn sein?

sven1978
18-02-2003, 17:26
Fuer C

Eigentlich brauchst du das gar nicht Umwandel da c char zeichen sowiiso nur als int werte speichert

bei ausgabe eines zeichens als char wert wuerde das heisen:




#include <stdio.h>

void main(void) {
char x='F';
printf("\n%x",x);
printf("\n%i",x);
printf("\n%c",x);
}

Auserdem meine ich doch das laut asci tab. F als HEX46 ist

arthur
18-02-2003, 18:19
@sven1978:
du hast da was missverstanden, gewünscht war eine möglichst
kurze funktion die hex/dec konvertierung durchführt.( deswegen f=15)
@Jaipur:
ich würde schon sagen dass der weg den du beschrieben hast der
kürzeste ist (wobei man das sicherlich etwas optimieren könnte)

nickers
20-02-2003, 19:47
Na denn, hier ist eine Funktion die das können sollte was Du verlangst. Funktioniert nur mit Grossbuchstaben, müsste man also gegebenenfalls noch ein wenig verfeinern.


int HexToDez(char* Hex)
{
int c, i, k;

c=0;
i=0;

do{
k=Hex[strlen(Hex)-i-1];
if(k>47 && k<58) k=k-48;
else if (k>64 && k<71) k=k-55;
c+=k*(int)pow(16, i);
i++;
}while(i<(int)strlen(Hex));

return c;
}

Sowas ähnliches gabs gestern schon mal im PHP-Bereich, nur eben mit Binärzahlen. Das Prinzip ist aber das Gleiche.

arthur
20-02-2003, 20:47
hier nochmal das gleiche, aber etwas kürzer:


int HexToDez(const char* Hex)
{
int result = 0;
char c;
while ((c=*(Hex++))!=0)
{
(c-='0')>9?c-=7:0;
result=c+(result<<4);
}
return result;
}

nickers
20-02-2003, 21:11
Original geschrieben von arthur
hier nochmal das gleiche, aber etwas kürzer:


Jau, danke, C wie wir es lieben, kurz und unlesbar. :)

arthur
20-02-2003, 21:31
es geht sicher noch kürzer, hab nur keine zeit damit weiter zu spielen :)