首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同语言版本的Murmurhash得到不同的结果。

不同语言版本的Murmurhash得到不同的结果。
EN

Stack Overflow用户
提问于 2019-08-23 07:33:33
回答 1查看 1.1K关注 0票数 1

我在java(jedis和番石榴)、go和python中尝试了三个版本的murmurhash。java(番石榴)、go和python版本的结果输出相同的哈希代码,但与java(jedis)不同。所有的杂音码如下所示。我对结果很困惑。我已经看过这个问题,并在java中使用了Long.reverseBytes,但仍然与其他人不同。那么我该怎么做才能使杂音的所有输出保持不变。谢谢~

1. java版本(Jedis)

java级compile group: 'redis.clients', name: 'jedis', version: '3.1.0'

代码语言:javascript
复制
import redis.clients.jedis.util.MurmurHash;

MurmurHash murmurhash = new MurmurHash();
long h = murmurhash.hash("foo");
System.out.println(h);
System.out.println(Long.reverseBytes(h));

输出:

代码语言:javascript
复制
-7063922479176959649

6897758107479832477

2. golang版本

代码语言:javascript
复制
import "github.com/spaolacci/murmur3"

foo := int64(murmur3.Sum64WithSeed([]byte("foo"), 0x1234ABCD))
fmt.Println(foo)

输出:

代码语言:javascript
复制
-5851200325189400636

3. python版本

pip install mmh3

代码语言:javascript
复制
import mmh3

foo = mmh3.hash64('foo', seed=0x1234ABCD, signed=True)
print(foo)

输出:

代码语言:javascript
复制
-5851200325189400636

4. java(番石榴)

java级compile group: 'com.google.guava', name: 'guava', version: '28.0-jre'

代码语言:javascript
复制
import com.google.common.hash.Hashing

long foo = Hashing.murmur3_128(0x1234ABCD).hashString("foo", charset.forName("UTF-8")).asLong();
System.out.println(foo);

输出:

代码语言:javascript
复制
-5851200325189400636
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-06 08:29:55

TL;博士

Jedis使用Murmur2,而其他库使用Murmur3。

在将一些代码从Java/Jedis迁移到Golang时,我也爱上了它。

这种差异是由于不同版本的杂音。到目前为止,Jedis使用的是Murmur2 (参见源代码文档),而上面提到的其他库使用Murmur3。

除了查看注释/代码之外,我还使用Murmur2参考实现验证了这一点。使用相同的种子和键可以得到与您的Jedis示例完全相同的结果。

代码片段:

代码语言:javascript
复制
const char *key = "foo";

uint64_t result = MurmurHash64A(key, std::strlen(key), 0x1234ABCD);

std::cout << "  result (unsigned): " << result << std::endl;
std::cout << "    result (signed): " << (long) result << std::endl;
std::cout << "reversed byte order: " << __builtin_bswap64(result) << std::endl;

输出:

代码语言:javascript
复制
    result (unsigned): 11382821594532591967
      result (signed): -7063922479176959649
  reversed byte order:  6897758107479832477
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57621707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档