From 1854755fb681874676a0af57c6d36940898fa430 Mon Sep 17 00:00:00 2001 From: morn-0 <90960002+morn-0@users.noreply.github.com> Date: Mon, 19 Sep 2022 15:52:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20murmur3=2032=20=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/cn/hutool/core/lang/hash/MurmurHash.java | 6 +++--- .../java/cn/hutool/core/lang/hash/MurMurHashTest.java | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/hash/MurmurHash.java b/hutool-core/src/main/java/cn/hutool/core/lang/hash/MurmurHash.java index 94826602b..2369c30e8 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/hash/MurmurHash.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/hash/MurmurHash.java @@ -95,11 +95,11 @@ public class MurmurHash implements Serializable{ int k1 = 0; switch (length - idx) { case 3: - k1 ^= data[idx + 2] << 16; + k1 ^= (data[idx + 2] & 0xff) << 16; case 2: - k1 ^= data[idx + 1] << 8; + k1 ^= (data[idx + 1] & 0xff) << 8; case 1: - k1 ^= data[idx]; + k1 ^= (data[idx] & 0xff); // mix functions k1 *= C1_32; diff --git a/hutool-core/src/test/java/cn/hutool/core/lang/hash/MurMurHashTest.java b/hutool-core/src/test/java/cn/hutool/core/lang/hash/MurMurHashTest.java index fcf946b5e..4a4628145 100755 --- a/hutool-core/src/test/java/cn/hutool/core/lang/hash/MurMurHashTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/lang/hash/MurMurHashTest.java @@ -9,15 +9,15 @@ public class MurMurHashTest { @Test public void hash32Test() { int hv = MurmurHash.hash32(StrUtil.utf8Bytes("你")); - Assert.assertEquals(222142701, hv); + Assert.assertEquals(-1898877446, hv); hv = MurmurHash.hash32(StrUtil.utf8Bytes("你好")); - Assert.assertEquals(1188098267, hv); + Assert.assertEquals(337357348, hv); hv = MurmurHash.hash32(StrUtil.utf8Bytes("见到你很高兴")); - Assert.assertEquals(-1898490321, hv); + Assert.assertEquals(1101306141, hv); hv = MurmurHash.hash32(StrUtil.utf8Bytes("我们将通过生成一个大的文件的方式来检验各种方法的执行效率因为这种方式在结束的时候需要执行文件")); - Assert.assertEquals(-1713131054, hv); + Assert.assertEquals(-785444229, hv); } @Test