gpt4 book ai didi

javascript - MurmurHash3_32 Java 返回负数

转载 作者:行者123 更新时间:2023-12-01 18:06:42 30 4
gpt4 key购买 nike

我正在尝试复制 MobileSheetsPro(一个 Android 应用程序)的文件哈希,其中有一个 hashcodes.txt,其中包含每个文件的哈希,以及路径、上次修改日期和文件大小。我们将只关注哈希部分。

所以对于我上传的随机歌曲here如果您想亲自尝试一下,我正在使用 murmurhash-native npm 包将其转换为缓冲区,然后像这样对其进行哈希处理:

const fs = require("fs");
const { promisify } = require("util");
const { murmurHash } = require("murmurhash-native");
const readFileAsync = promisify(fs.readFile);

async function hashcodeObjFromFilePath(filepath) {
const buf = await readFileAsync(filepath);
const h = murmurHash(buf);
console.log(h);
}

当使用默认种子 0 时,将打印出哈希值 4275668817;当使用种子 0xc58f1a7b 作为第二个参数时,将打印出哈希值 3020822739

问题:应用程序的计算方式似乎有所不同。开发人员编写了以下内容,但我在他链接的代码中没有看到确切的函数:

Check this out: github link

Those are the classes I've utilized. I call Hashing.goodFast32Hash(HASH_KEY)) where HASH_KEY is equal to 0xC58F1A7B.

编辑我从开发人员那里得到了更多信息:

I call Files.hash(file, Hashing.goodFast32Hash(HASH_KEY)); Using the return value from that, I call "asInt()" on the HashCode object that is returned. So it's a signed integer value (negative values are just fine). And yes, HASH_KEY is the seed value passed to the function.

由于我不擅长 Java,所以我仍然不知道在 Node-js 中复制它......

这就是我所掌握的所有信息,伙计们。有人知道我哪里出错了吗?

最佳答案

找到了! Java 库中的 asInt() 函数返回一个有符号 int32 * 以小端字节顺序

以下可能不是最简单的方法,而是代码

const h = murmurHash(buf, "buffer", 0xc58f1a7b);
// console.log(parseInt(h, 16).toString(2));
const fromHashFile = Buffer.alloc(4);
fromHashFile.writeInt32BE(-1274144557);
console.log(fromHashFile);
console.log(h);
console.log(h.readInt32BE());
console.log("hash from hashcodes file: -1274144557");

将以下内容打印到控制台:

<Buffer b4 0e 18 d3>
<Buffer b4 0e 18 d3>
-1274144557
hash from hashcodes file: -1274144557

关于javascript - MurmurHash3_32 Java 返回负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60547276/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com