Hashcode d'une string

Contenu du snippet

Code assez simple si le Pchar pour la String gene faites :
HashName(PChar(VariableDeTypeString)); pour lancer le Hash
Y'a pas de limitation de taille de la chaine...

Source / Exemple :


Function HashName(aString: PChar): Integer;
asm
  mov ecx,eax
  xor eax,eax
@loop:
  mov  dl,[ecx]
  test dl,dl                       
  jz   @Out
  rol  eax,5
  xor  al,dl
  inc  ecx
  jmp  @loop
@Out:
End;

Conclusion :


En fait il utilise le XOR pour que chaque caractere influence le hash. Et il decale la valeur de 5 bit a chaque caractere injecté. En utilisant le rol, le decalage fait réentrer les bits qui sortent a gauche, à droite, s'assurent ainsi que chaque caractere garde son influence sur le hash final.
Le plus simple des hashcode consiste en un XOR de tous les caractere. Mais dans ce cas là, on obtiendrait que 256 clefs differentes ce qui est trop faible. Alors on a rajouté le decalage pour couvrir autant de bits que possible. Ce qui donne un hash sur 32bits, soit 4MM de solutions, c beaucoup mieux :)

PS: le rol 5 en pascal ca fait un truc du genre A:=((A and _F8000000) shr 27) or ((A and _07FFFFFF) shl 5);

code de Bkg2k :)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.