En service a j'ai une chaîne qui est hachée comme ceci :
fun string.tohash(): long { var hashcode = this.hashcode().tolong() if (hashcode < 0l) { hashcode *= -1 } return hashcode }
Je veux répliquer ce code dans le service b écrit en golang, donc pour le même mot j'obtiens exactement le même hachage. D'après ce que j'ai compris de la documentation Kotlin, le hachage appliqué renvoie un entier de 64 bits. Alors allez je fais ça :
func hash(s string) int64 { h := fnv.new64() h.write([]byte(s)) v := h.sum64() return int64(v) }
Mais je n'obtiens pas la même valeur en faisant des tests unitaires. J'obtiens :
func test_hash(t *testing.t) { tests := []struct { input string output int64 }{ {input: "papafritas", output: 1079370635}, } for _, test := range tests { got := hash(test.input) assert.equal(t, test.output, got) } }
Résultat :
7841672725449611742
Ai-je fait quelque chose de mal ?
Java et Kotlin utilisent des fonctions de hachage différentes de celles de Go.
Les options possibles sont :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!