Comment une fonction de hachage sdbm
(telle que this) peut-elle être implémentée en C#?Comment une fonction de hachage sdbm pourrait-elle être implémentée en C#?
3
A
Répondre
4
Vous pouvez prendre le code C presque sans changements:
uint sdbm(string str)
{
uint hash = 0;
foreach(char ch in str)
{
hash = ch + (hash << 6) + (hash << 16) - hash;
}
return hash;
}
Ou pensez-vous de quelque chose de plus sophistiqué?
1
Je n'ai pas un compilateur C mis en place, je ne peux pas tester pour voir si elle effectue la même chose, mais je pense ce qui suit est correcte:
private static ulong SBDM(string str)
{
ulong hash = 0;
foreach (char c in str)
{
hash = c + (hash << 6) + (hash << 16) - hash;
}
return hash;
}
Si vous avez juste besoin obtenir un hachage de la chaîne et peu importe l'implémentation, vous pouvez toujours faire theString.GetHashCode();
0
Le résultat du hachage diffère entre l'implémentation C++ et C#. J'ai compris que le paramètre str doit être passé en tant que tableau d'octets.
private uint sdbm(byte[] str)
{
uint hash = 0;
foreach (char ch in str)
hash = ch + (hash << 6) + (hash << 16) - hash;
return hash;
}
appeler la méthode en convertissant la valeur à hacher avec la méthode BitConverter.GetBytes.
uint Hash = sdbm(BitConverter.GetBytes(myID));