亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不同語言版本的 Murmurhash 得到不同的結果

不同語言版本的 Murmurhash 得到不同的結果

Go
不負相思意 2023-07-17 14:21:36
我已經在java(jedis和guava)、go和python中嘗試了三個版本的murmurhash。java(guava)、go和python版本的結果輸出相同的哈希碼,但與java(jedis)不同。所有 murmurhash 代碼如下所示。我對結果感到困惑。我已經看到這個問題并Long.reverseBytes在java中使用,但仍然與其他問題不同。那么我應該怎么做才能使 murmurhash 的所有輸出保持相同。謝謝~1.java版本(jedis)java gradlecompile group: 'redis.clients', name: 'jedis', version: '3.1.0'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));輸出:-706392247917695964968977581074798324772.golang版本import "github.com/spaolacci/murmur3"foo := int64(murmur3.Sum64WithSeed([]byte("foo"), 0x1234ABCD))fmt.Println(foo)輸出:-58512003251894006363.python版本pip install mmh3import mmh3foo = mmh3.hash64('foo', seed=0x1234ABCD, signed=True)print(foo)輸出:-58512003251894006364. java(番石榴)java gradlecompile group: 'com.google.guava', name: 'guava', version: '28.0-jre'import com.google.common.hash.Hashinglong foo = Hashing.murmur3_128(0x1234ABCD).hashString("foo", charset.forName("UTF-8")).asLong();System.out.println(foo);輸出:-5851200325189400636
查看完整描述

1 回答

?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

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


在將一些代碼從 Java/Jedis 遷移到 Golang 時,我也愛上了它。

差異是由于雜音版本不同造成的。迄今為止,Jedis 使用的是 Murmur2,而上述其他庫則使用 Murmur3。

除了查看注釋/代碼之外,我還使用Murmur2 參考實現驗證了這一點。使用相同的種子和密鑰會產生與 Jedis 示例完全相同的結果。

代碼片段:

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;

輸出:


? ? result (unsigned): 11382821594532591967

? ? ? result (signed): -7063922479176959649

? reversed byte order:? 6897758107479832477


查看完整回答
反對 回復 2023-07-17
  • 1 回答
  • 0 關注
  • 193 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號