Question

Je veux comparer deux sha1 hachages pour l'égalité.Ce qui pourrait être le moyen le plus efficace pour ce faire?Actuellement, je suis en train d'essayer en utilisant comparateur de mémoire.Merci.

Était-ce utile?

La solution

Eh bien, puisque vous savez déjà au moment de la compilation comment grand les blocs sont, vous pourriez faire ceci:

#include <cstdint>

bool is_same_sha1(const char* p, const char* q)
{
    const std::uint32_t* a = (const std::uint32_t*)p;
    const std::uint32_t* b = (const std::uint32_t*)q;
    return a[0] == b[0] && a[1] == b[1] && a[2] == b[2]
        && a[3] == b[3] && a[4] == b[4];
}

Mais ne prenez pas mon avis à l'aveuglette, vous devriez mesure toute solution personnalisée à l'encontre de la memcmp solution et l'utiliser seulement si elle vous donne un avantage de performance significative.Je ne serais même pas surpris si la memcmp a été encore plus rapide parce qu'il fait quelque chose d'extrêmement intelligent et sale.

Autres conseils

Quel est le problème avec memcmp()?Vous devez comparer tous les octets de deux hachages; memcmp() rapidement échouer sur la première différence qu'il trouve;et memcmp() peut être écrit par la bibliothèque des auteurs à travailler dans des tailles de segment qui sont de bons choix pour la plate-forme.

std::equal semble être le meilleur pari, mais memcmp serait aussi travailler.En ce qui concerne l'efficacité, il dépendra de la mise en œuvre, mais aussi (peut-être) comment les données sont définies et représentés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top