2016-10-26 4 views
0

Ich bin ein Anfänger-Mittelstufe-Arduino-Codierer, der versucht, 2-stellige Dezimalzahlen in Hexadezimalzahlen für eines meiner Projekte zu konvertieren. Der Code, den ich gemacht scheint zu funktionieren, aber es scheint, viel, viel länger als es sein sollte:Umwandlung von 2-stelligen Dezimalzahlen in Hexadezimalzahlen

int decToHex(int ones, int tens) { 
    int result = 0x00; 
    if (tens == 0) { 
    switch (ones) { 
     case 0: 
     result = 0x00; 
     break; 
     case 1: 
     ... 
     case 9: 
     result = 0x09; 
     break; 
    } 
    } else { 
    switch (tens) { 
     case 1: 
     switch (ones) { 
      case 0: 
      result = 0x0A; 
      break; 
      case 1: 
      ... 
      case 9: 
      result = 0x13; 
      break; 
     } 
     break; 
     case 2: 
     ... 
     case 9: 
     switch (ones) { 
      ... 
     } 
     break; 

    } 
    } 
    return result; 
} 

Jede Hilfe dieses Codes Verkürzung sehr geschätzt werden würde.

+0

Wenn Sie Code arbeiten und Sie Vorschläge, wie es verbessert werden kann, dann [codereview.se] ist ein geeigneter Ort für Ihre Frage. – kaylum

+2

'return ten * 10 + one;' sollte es tun. – potrzebie

+1

Mögliche Duplikate von [Dezimal zu Hexadezimal-Konvertierung C++ integrierte Funktion] (http://stackoverflow.com/questions/20034297/decimal-to-hex-conversion-c-built-in-function) – Confuse

Antwort

0

eine einfache Möglichkeit zur Eingabe einer 2-stelligen Dezimalwert

und als Hexadezimalwert ausgegeben.

unsigned int inputValue = 0; 

if(1 == scanf("%u", &inputValue)) 
{ 
    if(99 >= inputValue) 
    { 
     printf(%04x\n", inputValue); 
    } 

    else 
    { 
     // handle range error 
    } 
} 

else 
{ 
    // handle scanf() failure 
} 

für die gesetzte Funktion:

char * decToHex(unsigned int ones, unsigned int tens) 
{ 
    short int result = 0x0000; 
    char *hexStr = NULL; 

    if(NULL != (hexStr = malloc(7))) 
    { 
     // handle error and exit 
    } 

    // implied else, malloc successful 

    unsigned short int totalValue = ones+ (10*tens); 

    sprintf(hexStr, "0X%04x", totalValue); 

    return hexStr; 
} 
+0

Hinweis: Diese Antwort behandelt keine negativen Eingabewerte – user3629249

0

Keep it simple. Sie möchten, dass die Hex-Darstellung des Int als String gedruckt wird? Siehe unten. Es gibt keinen Unterschied außer der Darstellung in Base 10 oder Base 16 wirklich. Welche kann anders gedruckt werden.

int a = 10 * tens + ones; 

printf("%x\n", a); 
printf("0x%x\n", a); 
Verwandte Themen