Kann man den code kürzen?



  • Ich würde am Funktionsnamen sparen...



  • _matze schrieb:

    Ich würde am Funktionsnamen sparen...

    Gute Idee. Nach alter Tradition die Vokale weglassen.

    BOOL sVldK(char* n_ky)
    


  • Ok, ich würde sagen, Problem gelöst, Thread kann geschlossen werden. 😃



  • Kann man den code kürzen?

    beschreib mal was der code machen soll. wann ist ein key denn valid?
    🙂



  • Da ich nicht unter Agoraphobie leide, anbei mein Versuch:

    BOOL isValidKey(const char * const in_key)
    {
        const char * const in_part = &in_key[16];
        int c_key = 0;
        int n = 0;
        int i = 0;
        int t_key = 0;
    
        for (n = 0; n < 16; ++n)
        {
            c_key ^= in_key[n];
    
            for (i = 8; i > 0; --i)
            {
                if ((c_key & 0x000000FF) != 1)
                {
                    c_key ^= 0x14002;
                }
                c_key >>= 1;
            }
        }
    
        for (i = 12, n = 0; i >= 0; i -= 4, ++n)
        {
            if ((in_part[n] >= 48) && (in_part[n] <= 57))
            {
                t_key |= ((in_part[n] - 48) << i);
            }
            else
            {
                t_key |= ((in_part[n] - 55) << i);
            }
        }
    
        return (t_key == c_key);
    }
    

    Weiss nicht, ob's kompiliert, aber, Kritik in jedem Fall erwünscht 🙂



  • Keine Kritik, nur eine Frage:

    if ( c_key & 0x000000FF  != 1 ) ...
    
    if ((c_key & 0x000000FF) != 1)  ...
    

    Bewirken beide Ausdrücke das gleiche?

    ;fricky schrieb:

    wann ist ein key denn valid?

    Wenn "c_key == hexchartoint (in_key[16-19])" ?



  • +gjm+ schrieb:

    Keine Kritik, nur eine Frage:

    if ( c_key & 0x000000FF  != 1 ) ...
    
    if ((c_key & 0x000000FF) != 1)  ...
    

    Bewirken beide Ausdrücke das gleiche?

    nee, != kommt vor &, also machen die klammern was aus.
    🙂



  • Der Originalcode hat keine Klammern. Würde dann nicht folgendes gehen:

    if ( c_key & 1 ) ...
    
    //  weil:
    // (0x000000FF != 1) -> immer wahr, also 1 :)
    


  • +gjm+ schrieb:

    Der Originalcode hat keine Klammern. Würde dann nicht folgendes gehen:

    if ( c_key & 1 ) ...
    
    //  weil:
    // (0x000000FF != 1) -> immer wahr, also 1 :)
    

    ^^stimmt, da fehlen im orginalcode die klammern. und abc.w hat sie instinktiv hingeschrieben.
    🙂



  • ;fricky schrieb:

    stimmt, da fehlen im orginalcode die klammern. und abc.w hat sie instinktiv hingeschrieben.

    Ja, und damit, wie es aussieht, in die Funktion einen Fehler eingebaut. Heißt es nicht "Never touch a running system" o.ä.? 🙂
    Für diesen Ausdruck

    if ( c_key & 1 )
    

    würde ich eine explizite Abfrage einbauen, ungefähr so:

    if (mask == (c_key & mask))
    

Anmelden zum Antworten