Go语言Murmur3哈希结果与Python mmh3不一致,如何统一?
Go与Python mmh3哈希结果不一致的解决方法
你遇到的差异核心原因是返回值的符号类型不同:
- Python的
mmh3.hash()默认返回带符号的32位整数(int32) - Go的
murmur3.Sum32()/Sum32WithSeed()返回的是无符号的32位整数(uint32)
只需将Go计算出的无符号哈希值强制转换为带符号的int32,就能和Python的结果完全对齐。
修正后的Go代码
package main import ( "fmt" "github.com/spaolacci/murmur3" ) func main() { // 计算无符号32位哈希值 hashUint := murmur3.Sum32WithSeed([]byte("foods"), 45) // 转换为带符号int32,匹配Python mmh3.hash的输出格式 hashInt := int32(hashUint) fmt.Println(hashInt) }
验证结果
运行你的Python示例代码得到的结果,修正后的Go代码会输出完全相同的数值。
内容的提问来源于stack exchange,提问作者chensiwei
相关产品推荐
相关产品推荐

