Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2664 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Hash

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Hash

n°909015
burgergold
5$? va chez l'diable!
Posté le 27-11-2004 à 03:14:41  profilanswer
 

j'ai récupéré sur le net une petite fonction de hashing qui ressemble à ceci:
 

Code :
  1. unsigned int hash(unsigned char * t) {
  2.   unsigned int h =0;
  3.   unsigned int g;
  4.   while (*t) {
  5.     h = (h << 4) + *t++;
  6.     if (g = h & 0xF0000000)
  7.       h ^= g >> 24;
  8.     h &= ~g;
  9.   }
  10.   return h;
  11. }


 
du coup, elle recoit en param une chaine de caractère
mais si je désirerais hasher un int, un double, ou tout simplement un objet que j'aurais moi même créé, comment serait-ce possible?


Message édité par burgergold le 27-11-2004 à 16:16:51
mood
Publicité
Posté le 27-11-2004 à 03:14:41  profilanswer
 

n°909025
Lam's
Profil: bas.
Posté le 27-11-2004 à 08:16:46  profilanswer
 

Bah tu lui passes un argument "taille", et en ligne 6, au lieu de faire
 while(*t)
 
tu fais:
 const unsigned char * target =t+taille;
 while(target-t)  
 
Pense aussi à changer le prototype pour qu'elle accepte des "const unsigned char *".
 
Et bien sûr, après ça, tu fais des charmants:
  hash(static_cast<const unsigned char *>(&x), sizeof(x));


Message édité par Lam's le 27-11-2004 à 08:28:13
n°909034
Joel F
Real men use unique_ptr
Posté le 27-11-2004 à 09:34:03  profilanswer
 

Ou alors tu fait des specialisations template :o

n°909161
burgergold
5$? va chez l'diable!
Posté le 27-11-2004 à 15:21:45  profilanswer
 

ahhhh daccord jcomprends maintenant à quoi le second parametre (int) de la fonction hash sert
 
sinon le cast ca semble pas fonctionner
 
error: invalid static_cast from type `int*' to type `const unsigned char*'
 
i est un simple int incrémenter dans un for :/
 
hash(static_cast<const unsigned char *> (&i), sizeof(i))


Message édité par burgergold le 27-11-2004 à 15:47:02
n°909178
burgergold
5$? va chez l'diable!
Posté le 27-11-2004 à 16:03:44  profilanswer
 

ca semble maintenant fonctionner
 
ex:
12.11 -> 121651552
12.12 -> 135937056
 

Code :
  1. unsigned int hash(const unsigned char * t, int taille) {
  2.   unsigned int h(0);
  3.   unsigned int g;
  4.   const unsigned char * target = t + taille;
  5.   while (target - t) {
  6.     h = (h << 4) + *t++;
  7.     if (g = h & 0xF0000000)
  8.       h ^= g >> 24;
  9.     h &= ~g;
  10.   }
  11.   return h;
  12. }


 

Code :
  1. hash((const unsigned char *) &i, sizeof(i))


 
edit: jai remplacé le while par le tien, ca fonctionne aussi


Message édité par burgergold le 27-11-2004 à 16:08:05
n°909180
burgergold
5$? va chez l'diable!
Posté le 27-11-2004 à 16:10:33  profilanswer
 

hum mais le hashing d'un int(1) et int(4096) c'est la meme chose
 
en gros cette algo semble me sortir que 4096 valeur de hash :/

n°909182
burgergold
5$? va chez l'diable!
Posté le 27-11-2004 à 16:17:58  profilanswer
 

bon je tente le coup avec un truc que le prof a expliqué
 

Code :
  1. unsigned int hash(const unsigned char * t, int taille) {
  2.   unsigned int h(0);
  3.   static unsigned int table[256];
  4.   for(int i = 0; i < taille; i++) {
  5.     h = h>>1 | h>>31;
  6.     h ^= table[t[i]];
  7.   }
  8.   return h;
  9. }


 
en gros, c'est que jdois remplir table, mais jtrouve ca un peu bete de bourrer le tout de 256 valeurs à la main, vous trouver pas?


Message édité par burgergold le 27-11-2004 à 16:29:35

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Hash

 

Sujets relatifs
Récupérer les valeurs d'un hashCalcul de hash SHA-1
[perl] tableau et hash[Divers] hash SHA bin
hash[STL] SGI et leur extension hash_* : coup de gueule et solutions
[Perl] Hash et cgiHash d'un string
[crypto] En quoi ça consiste exactement la technique du hash ?Passer des HASH TABLE de scripts CGI en scripts CGI
Plus de sujets relatifs à : [C++] Hash


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR