Python 和 javascript 之间的 Murmurhash3

问题描述 投票:0回答:1

所以我正在开发一个项目,并且尝试使用 x64.hash128 在 python 中获得与在 javascript 中相同的结果。
>>> mmh3.hash128('Helo', 0)
36257070446276374087060059272450503274
>>> mmh3.hash128('Helo', 0, False)
20867082311197569335197338913536872358

使用javascript方法时:

murmurHash3.x64.hash128("Helo")
'29c3815d749d726a1b46db969b492ae8'

你知道我该如何解决这个问题吗?我尝试自己翻译,但最终没成功,让我很头疼。

使用的库:

  1. https://pypi.org/project/mmh3/
  2. https://github.com/pid/murmurHash3js
javascript python murmurhash
1个回答
0
投票

经过研究,JS输出的是16进制的值,问题出在字节序的差异上。 Python 将 128 位整数输出为单个大整数,而 JavaScript 将哈希拆分为两个 64 位段。

hash_int = mmh3.hash128('Helo', 0)

# Splitting it into two 64-bit segments and reversing them
high = (hash_int >> 64) & ((1 << 64) - 1)  
low = hash_int & ((1 << 64) - 1)            

# Converting each part to hex and reversing the order
hash_hex = f'{low:016x}{high:016x}'

print(hash_hex)  #expected output:'29c3815d749d726a1b46db969b492ae8'
© www.soinside.com 2019 - 2024. All rights reserved.