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 Ausdruckif ( c_key & 1 )
würde ich eine explizite Abfrage einbauen, ungefähr so:
if (mask == (c_key & mask))