MurmurHash3_32 Java returns 负数
MurmurHash3_32 Java returns negative numbers
我正在尝试复制 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() 函数 returns 一个带符号的 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
我正在尝试复制 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() 函数 returns 一个带符号的 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