Char 2 Hex



  • Hallo,
    bin immernoch relativ neu in C un deshalb bitte ich um etwas Mitleid.

    Die Aufgabenstellung lautet:
    Das char2hex ist ein Programm zur Konvertierung eines über die Tastatur
    eingegebenes Zeichen in die entsprechende ASCII Hexadezimalzahl. Dabei
    darf das „%x“ oder „%X“ Formatierungszeichen NICHT verwendet werden

    Hab jetzt folgendes Programm dazu geschrieben:

    #include <stdlib.h>
    #include <stdio.h>
    
    #define ULONG_COUNT 18446744073709551616 // 0 - 18.446.744.073.709.551.615
    
    char *Hexwert (unsigned long dezimal)
    {
        char Erg[200];
    
        unsigned long i = 16;
        do
        {
            i <<= 4;  // *= 16
        } while (i < dezimal);
        i >>= 4;
        char pos = 0;
        while (i != 1)
        {
            char hex = dezimal / i;
            dezimal >>= 4;
            Erg[pos++] = hex < 10 ? '0' + hex : 'A' + hex;
            i >>= 4;
        }
        Erg[pos] = '\0';
    
        return Erg;
    }
    
    int main(void){
    
        unsigned long dezimal = 0;
        char weiter = 'J';
    
        do
        {        printf("\nBitte geben Sie ein beliebiges Zeichen ein: ");
            if (scanf("%d", &dezimal) < 1 )
            {
                printf("Fehler beim Lesen von der Standarteingabe");
                return EXIT_FAILURE;}
    
            printf("\n\n");
            printf("Ergebnis Hexadezimal:\t%s\n", Hexwert(dezimal));
    
            while (getchar() != '\n');
    
            printf("Moechten Sie noch ein Zeichen eingeben [J/N]: ");
            scanf("%c", &weiter);
            while (getchar() != '\n');
    
        } while( toupper(weiter) == 'J');
    
    	return EXIT_SUCCESS;
    }
    

    Leider liefert mir das Programm keine Lösung... Ich hoffe, dass sich das mal jmd angucken kann un mir Lösungsvorschläge liefern könnte.
    Schon mal vielen Dank im voraus.


  • Mod

    Das fängt ja schon einmal damit an, dass dezimal bei dir kein Zeichen sondern eine Zahl ist. Da du nicht verraten willst, was dein Fehler überhaupt ist, lasse ich daher mal das erste was ich gefunden habe als endgültige Antwort stehen.



  • char Erg[200]; ist eine lokale Variable in Hexwert().
    Diese ist nicht mehr gültig, sobald du die Funktion Hexwert() verlässt.
    Der Rückgabewert von Hexwert() zeigt aber auf Erg (da wird keine Kopie angelegt).

    Bei hex < 10 ? '0' + hex : 'A' + hex;
    wenn hex == 10 ist, hast du kein 'A' sondern ein 'K' (10 + 65 = 75)



  • Schonmal dafür vielen dank...

    mein Problem ist, dass jede Eingabe die ich mache, den "Fehler in der Standarteingabe" hervorruft,
    wenn ich diesen aus dem Programm entferne, rechnet es auch nicht in Hex um sondern liefert mir immer den Wert 0.
    Könnte mit der falschen Deklaration zusammenhängen



  • "%d" ist der Formatspecifier für int und nicht für unsigned long .


Anmelden zum Antworten