Hex in Dezi mit getch()



  • Hallo Community,
    ich bin gerade dabei Ansi C zu erlernen. Programmierkenntnisse habe ich bisher nur in Vb.net sammeln können. Ich habe nun eine Aufgabe erhalten in der ich eine Hexziffer eingeben und diese dann als dezimal ausgeben soll. Bei eingabe die nicht zum Hexadezimalsystem gehören soll eine Fehlermeldung erscheinen.

    Beispiel:
    Bitte geben Sie eine Hex-Ziffer ein: F
    Die Ziffer hat den Wert 15.
    Bitte geben Sie eine Hex-Ziffer ein: 3
    Die Ziffer hat den Wert 3.

    als Hinweis habe ich folgendes erhalten:

    Die Eingabe erfolgt durch das Einlesen einzelner ASCII-Zeichen, zweckmäßig mit getch().
    ASCII-Werte: 'A' = 65; 'a' = 97; '0' = 48
    Es sollen keine Funktionen aus <string.h> oder <ctype.h> wie z. B. isdigit()
    oder isanum() verwendet werden!

    So mein Problem besteht nun darin das getch() mir den Dezimalen ASCII Code der eingegebenen Ziffer zurückliefert. Wenn ich diesen dann natürlich in Hex oder dezimal umrechne kann ja nicht das richtige rauskommen.

    Ich hab das ganze bisher so versucht:

    #include <conio.h>
    #include <stdio.h>
    
    void main()
    {
       char i;
    
      printf("hexadezimale Zahl (ohne 0x) eingeben: ");
      i = getch();
        if(i>=65 && i<=70)
       {
    	    printf("hexadezimal 0x%x in dezimaler Darstellung: %d\n",i,i);
    
       }
    	else if (i>=48 && i<=57)
    	{
    		printf("hexadezimal 0x%x in dezimaler Darstellung: %d\n",i,i);
    	}
    	else
    	{
    		printf("Dies ist keine Hexzahl\n");
    	}
    
    }
    

    Hier habe ich den Dezimalen ASCII Wert von A eingelesen das ist ja die 65 und die wandelt er mir dann in Hex 41 um was dem A wieder entspricht nur in Hex.

    Ich möchte aber allerdings das er mir die Wertigkeit im Hexadezimalsystem ausgibt. Also A = 10, was mache ich falsch?
    könnte mir bitte jemand helfen.



  • Du subtrahierst einfach so viel, dass es passt. 65 - 55 = 10 = 0xA und 48 - 48 = 0 = 0x0 . Das gilt analog auch für die anderen Werte.

    ...
    if(i>=65 && i<=70)
    {
        printf("hexadezimal 0x%x in dezimaler Darstellung: %d\n",i - 55,i - 55);
    }
    else if (i>=48 && i<=57)
    {
        printf("hexadezimal 0x%x in dezimaler Darstellung: %d\n",i - 48,i - 48);
    }
    ...
    

Anmelden zum Antworten