Char Arrays schnell vergleichen
-
Hi
Wie vergleiche ich zwei Char Arrays miteinander und zwar mit der grösst möglichen Effizients?
MfG Joe
-
char
fürchar
durchgehen und sofort abbrechen, sobald zwei Zeichen nicht mehr übereinstimmen? Davon mal abgesehen bietet sich diestrcmp()
-Funktion (aus der string.h) an, diese dürfte ausreichend optimiert sein...
-
Der Aufwand um jedes Chararray zu vergrössern und ein \0 anzuhängen wäre viel zu gross. Strncmp ist leider ziemlich uneffizient.
-
memcmp?
-
Neues grösseres Array allozieren, Array hinkopieren, \0 anfügen, Vergleichen. Das ist doch absolut langsam.
-
Wovon redest du eigentlich?
-
Von dem Aufwand um strcmp zu verwenden.
-
Zuerst solltest du mal erwähnen was du nun vergleichen willst. Reine Daten oder Strings? Für beides wurden bereits Lösungen genannt.
-
static void Compare() { for (i=0; i < 16; i++){ if ( digest[i] != testhash[i] ) { break; } } if ( i == 16 ) { //if ( !strncmp(testhash,digest,16) ) { printf("\n%s\n",testpw); exit(0); } }
Ich vergleiche reine Daten. Ich habe es jetzt mal primär so gelöst. Gibt es noch eine schneller Variante oder Optimierung?
MfG Joe
-
Hast du memcmp() eigentlich mal getestet? Ist es langsamer als deine Lösung?
Was du noch optimieren könntest wäre dein char* als int* zu interpretieren und in einer Schleife gleich ein int zu vergleichen. Dann musst du aber sinnvollerweise testen, ob digest%sizeof(int)==0 und testhash%sizeof(int)==0 sind, also ordentlich aligned sind.
Ich bezweifle aber, dass der Vergleich von 16 chars dein Programm deutlich schneller oder langsamer macht.
-
static void?
exit(0) in einer unterfunktion?
global angelegte laufvariable i?joe, du willst einen hashcracker schreiben und zum vergleichen der hashes willst du memcmp oder die int-methode von tactx benutzen.
hab ich doch richtig erkannt, oder?
-
c.rackwitz schrieb:
static void?
exit(0) in einer unterfunktion?
global angelegte laufvariable i?Danke dir. Ich wollte das echt nicht kommentieren