Go语言的结果与Python的mmh3不同

h5qlskok  于 2023-02-14  发布在  Go
关注(0)|答案(1)|浏览(230)

我试了https://github.com/spaolacci/murmur3,roberson-io/mmh3和许多go版本。但是我从python mmh3得到了不同的结果。
Python示例:

import mmh3
print(mmh3.hash("foods",45))

Go示例:

package main

import (
    "fmt"

    "github.com/spaolacci/murmur3"
)

func main() {

    mHash := murmur3.New32WithSeed(45)
    mHash.Write([]byte("foods"))
    hashNum := mHash.Sum32()
    fmt.Println(hashNum)

    fmt.Printf("%d\n", murmur3.Sum64WithSeed([]byte("foods"), 45))
}

我想用python mmh3得到相同的散列值。那么如何从python中用mmh3得到相同的散列值呢?

8wtpewkr

8wtpewkr1#

在Go语言中,所有的哈希方法都返回无符号整数:

func (Hash32) Sum32() uint32

func Sum64WithSeed(data []byte, seed uint32) uint64

而在Python中,它们默认返回有符号整数:

hash(key[, seed=0, signed=True]) -> hash value   Return a 32 bit integer.

如果你想要相同的十进制数,你要么从Python返回一个unsigned int:

# 3049460612
print(mmh3.hash("foods",45,signed=False))

或者Go语言中的有符号整数:

mHash := murmur3.New32WithSeed(45)
mHash.Write([]byte("foods"))
hashNum := mHash.Sum32()
// -1245506684
fmt.Println(int32(hashNum))

相关问题