Heim >Backend-Entwicklung >Golang >String-Hashing in Kotlin und Golang

String-Hashing in Kotlin und Golang

WBOY
WBOYnach vorne
2024-02-06 10:12:12695Durchsuche

Kotlin 和 Golang 中的字符串散列

Frageninhalt

In Dienst a habe ich eine Zeichenfolge, die wie folgt gehasht ist:

fun string.tohash(): long {
    var hashcode = this.hashcode().tolong()
    if (hashcode < 0l) {
        hashcode *= -1
    }
    return hashcode
}

Ich möchte diesen in Golang geschriebenen Code in Service B replizieren, damit ich für dasselbe Wort genau den gleichen Hash erhalte. Soweit ich der Kotlin-Dokumentation entnehme, gibt der angewendete Hash eine 64-Bit-Ganzzahl zurück. Also los geht's, ich mache das:

func hash(s string) int64 {
    h := fnv.new64()
    h.write([]byte(s))
    v := h.sum64()
    return int64(v)
}

Aber ich erhalte beim Unit-Testen nicht den gleichen Wert. Ich bekomme:

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)
    }
}

Ergebnis:

7841672725449611742

Habe ich etwas falsch gemacht?


Richtige Antwort


Java und Kotlin verwenden andere Hash-Funktionen als Go.

Mögliche Optionen sind:

  1. Verwendet Standard-Hash-Funktionen.
  2. Reimplementieren Sie den Java-HashCode für Strings in Go.

Das obige ist der detaillierte Inhalt vonString-Hashing in Kotlin und Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen