Eine etwas andere Fallunterscheidung



  • Hallo!

    Ich versuche gerade eine Fallunterscheidung in C++ zu implementieren. Diese soll folgendermaßen arbeiten:

    1. Ich habe einen Integer.
    2. Dieser Integer wird jetzt in eine Hexadezimalzahl (achtstellig, mit führenden Nullen) umgerechnet.
    3. Anhand der einzelnen hexadezimalen Ziffern wird jetzt die Fallunterscheidung durchgeführt.

    Ist beispielsweise die achte hexadezimale Ziffer nun eine 3 wird dieses getan, ist die siebte Hex-Ziffer ein "F", wird etwas anderes getan und so weiter...

    Wie würdet ihr so eine Fallunterscheidung am besten implementieren? Ich habe bisher versucht, die Dezimalzahl mit sprintf in einen String zu konvertieren, der dann die Hex-Zahl beeinhaltet. Anschließend habe ich die weiteren Verzweigungen mit einzelnen If-Anweisungen machen wollen. Leider funktioniert das an diversen Stellen bei mir nicht... mal passen sprintf die Typen nicht, mal funktionieren die if-Vergleiche nicht...
    Bei mir sieht das bisher in etwa so aus:

    int    Decimal;	
    char   Hexadecimal[8];
    
    cin >> Decimal;
    
        // Dezimalzahl in achtstellige HEX-Zahl umwandeln
        sprintf (Hexadecimal, "%08X", Decimal);
    
        // HEX-Zahl analysieren und entscheiden
        if (strcmp(&Hexadecimal[7],"3")==0){/* tu jenes*/}
        if (strcmp(&Hexadecimal[6],"F")==0){/* tu dieses*/}
        ...
    

    Vielen Dank schonmal für alles

    the_viewer



  • Ziffern von klein nach groß gezählt, bei 0 anfangend:

    unsigned hex_ziffer(unsigned x, unsigned stelle) {
      return (x >> 4 * stelle) & 15;
    }
    

    Dann entsprechend

    if(hex_ziffer(Decimal, 2) == 15) { /* tu dieses */ }
    


  • #include <iostream>
    #include <sstream>
    
    int main()
    {
        unsigned int decimal;
        std::cin >> dezcimal;
    
        std::stringstream Str;
        Str << std::hex << decimal;
    
        std::string meineHexZahl = Str.str();
    
        if( meineHexZahl[2] == '7' )
           std::cout << "An der dritten Stelle befindet sich eine Sieben" << std::endl;
    
        cin.get();
    }
    

Log in to reply