Wie würde ich vergleichen 2 unsigned char arrays?
Ich habe einen server das berechnen der hash eines Bildes und sendet das Bild und hash an den client. Ich habe den client computing der hash von dem Bild, das Sie erhält. Dies ist das grundlegende setup aus:
SERVER
unsigned char sum[MD5_DIGEST_LENGTH];
md5sum(tdata, sum);
w = write(newsockfd,sum,MD5_DIGEST_LENGTH);
CLIENT
unsigned char ssum[MD5_DIGEST_LENGTH];
w = read(sockfd,ssum,MD5_DIGEST_LENGTH);
unsigned char sum[MD5_DIGEST_LENGTH];
md5sum(imgpath, sum);
int j;
for (j = 0; j < MD5_DIGEST_LENGTH; j++)
printf("%02x", ssum[j]);
printf("\n");
printf("CLIENT CHECKSUM: ", sum);
for (j = 0; j < MD5_DIGEST_LENGTH; j++)
printf("%02x", sum[j]);
printf("\n");
Die Ausgänge sind exakt die gleichen, aber wie prüfe ich Ihre Gleichstellung mit einer if-Anweisung? Wenn ich das mache:
if (sum == ssum)
es immer als false ausgewertet wird.
Ein byte zu einem Zeitpunkt. Arrays können nicht verglichen werden, die durch
möglich, Duplikat der C-String-Mit Gleichheits-Operator == für den Vergleich von zwei strings auf Gleichheit
==
, wie es nur vergleicht die Adressen, deren erstes element (das ist, wie Sie sehen, anders-und Sie sollten).möglich, Duplikat der C-String-Mit Gleichheits-Operator == für den Vergleich von zwei strings auf Gleichheit
InformationsquelleAutor Clinton Jooooones | 2015-05-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden memcmp:
InformationsquelleAutor Shea Levy
sum
undssum
sind arrays, das bedeutet, dass Sie Zeiger, um einen block von Speicher, so dass, wenn Sie schreibenif (sum == ssum)
Sie sind der Vergleich zweier Zeiger. Deshalb, offensichtlich, Ihre Ausgabe ist immer falsch, weil die Zeiger auf verschiedenen Blöcken des Speichers kann nicht das gleiche sein.So, Sie brauchen, um zu vergleichen, zwei arrays, die durch seine Elemente. Sie können
memcmp
:Ja, und auch memcmp funktioniert schnellere als die Schleife.
Der Rückgabewert von memcmp ist kein boolean. Wenn Sie gibt 1 oder -1, das heißt, das erste byte nicht passen, ist kleiner oder größer als der andere Wert, beziehungsweise. Wenn Sie gleich sind es wieder 0.
bearbeitet, vielen Dank 🙂
InformationsquelleAutor FalconUA