URL: https://linuxfr.org/forums/programmation-perl/posts/equivalent-en-perl-de-hashcode-en-java Title: Equivalent en Perl de Hashcode en Java Authors: mouling Date: 2010年04月29日T13:08:56+02:00 Tags: Score: 1 Bonjour, Je dispose de code Java que je voudrais réécrire en Perl, et j'ai toutes les peines du monde sur la fonction longHashcode(String str) que voici : public static long longHashCode(String str) { £spaces£ £/spaces£long h = 0; £spaces£ £/spaces£byte val[] = str.getBytes(); £spaces£ £/spaces£int len = str.length(); £spaces£ £/spaces£for (int i = 0; i < len; i++) £spaces£ £/spaces£h = 31 * h + val[i]; £spaces£ £/spaces£return h; £spaces£ £/spaces£} Voici deux exemples de ce que me renvoie ce code pour deux entrées : short_string => 3010251491749729588 rather_longer_longer_string => -3822599824667020448 En cherchant sur le Web, j'ai trouvé une piste ([http://poeticcode.wordpress.com/2008/03/10/perl-string-hashc(...)](http://poeticcode.wordpress.com/2008/03/10/perl-string-hashcode/) ), que j'ai adaptée avec Math::BigInt pour avoir des entiers longs : use Math::BigInt; sub hashCode { £spaces£ £/spaces£my $hash = Math::BigInt->new(); £spaces£ £/spaces£foreach(split //,shift) { £spaces£ £/spaces£$hash = 31*$hash+ord($_); £spaces£ £/spaces£} £spaces£ £/spaces£return $hash->bstr(); } Ce qui est un début, mais pas le résultat final, loin s'en faut : pour les chaînes de caractères courtes ("short_string" par exemple), tout va bien et j'ai le même résultat en Perl et Java, mais quand la chaîne s'allonge, Perl continue d'incrémenter la valeur de $hash là où Java ne dépasse jamais la longueur max d'un long. Comment dire à Perl de se comporter autrement? J'ai essayé toutes sortes des trucs tordus et inefficaces, en vain ! Pourtant, j'ai l'impression que c'est pas si compliqué, mais les compétences me manquent... quelqu'un saurait-il m'aider ? Merci d'avance de votre aide !

AltStyle によって変換されたページ (->オリジナル) /