2016-03-30 10 views
0

Ich suche nach der geringsten Menge an Code in C, um ein char nach int zu konvertieren, wo es -1 (oder irgendein Fehlerflag) kennzeichnet, wenn das Zeichen keine gültige Hexadezimalzahl ist.Kürzeste Möglichkeit, Hexadezimalzeichen in C in Int zu konvertieren?

hier ist was ich kam, gibt es einen kürzeren Weg?

// input example 
char input = 'f'; 

// conversion segment 
int x = input - '0';  
if (!((x >= 49 && x <= 54) || (x >= 0 && x <= 9))) x = -1; 
if (x > 9) x -= 39; 

// test print 
printf("%d", x); 
+0

und Plakate handeln, wie sie vergessen '‚A'' –

+0

Was wollen Sie das Zeichen '‘a'' werden umgewandelt? – kaylum

+0

@ kaylum '10' vermutlich –

Antwort

0

Versuchen Sie, diese Funktion:

isxdigit(c); 
+0

Ich wusste, dass es einen Weg gab! Übrigens für jeden anderen benötigt es '' – Austin

+0

Eigentlich wäre das schöner, wenn es den int-äquivalenten Wert anstatt einer 1 zurückgibt, aber immer noch etwas kürzer wird. – Austin

+0

Dies konvertiert nicht nach dem Titel des Titels "Konvertiere Hexadezimalzeichen in int", es testet einfach (true/false), wenn ein Zeichen ein hexadezimales Zeichen ist - und nimmt dafür eine 256 bit/byte-Tabelle. – chux

1

Dieser Code ASCII geht davon aus und wandelt alle 256 Zeichen-Codes in 256 verschiedene Codes, teilweise '0'-'9' 'A'-'F' Karte 0,1,...15. siehe

Weitere Tricks und Vereinfachung der post

unsigned char ch = GetData(); // Fetch 1 byte of incoming data; 
if (!(--ch & 64)) {   // decrement, then if in the '0' to '9' area ... 
    ch = (ch + 7) & (~64);  // move 0-9 next to A-Z codes 
} 
ch -= 54;      // -= 'A' - 10 - 1 
if (ch > 15) { 
    ; // handle error 
} 
Verwandte Themen