Maison  >  Article  >  développement back-end  >  Hachage de chaînes dans Kotlin et Golang

Hachage de chaînes dans Kotlin et Golang

WBOY
WBOYavant
2024-02-06 10:12:12646parcourir

Kotlin 和 Golang 中的字符串散列

Contenu de la question

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 ?


Bonne réponse


Java et Kotlin utilisent des fonctions de hachage différentes de celles de Go.

Les options possibles sont :

  1. Utilise des fonctions de hachage standard.
  2. Réimplémentez Java hashCode pour les chaînes dans Go.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer