首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MurmurHash3_32 Java返回负数

MurmurHash3_32 Java返回负数
EN

Stack Overflow用户
提问于 2020-03-05 14:11:00
回答 1查看 733关注 0票数 1

我试图复制安卓应用MobileSheetsPro的文件散列,其中有一个hashcodes.txt,其中包含每个文件的散列,以及路径、最后修改的日期和文件大小。我们就把注意力集中在哈希部分。

因此,对于我上传的随机歌曲这里,如果您想自己尝试,我将使用murmurhash-native npm包将其转换为缓冲区,然后按如下方式散列:

代码语言:javascript
复制
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作为第二个参数时,输出3020822739的哈希值。

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

看看这个:github链接 这些是我用过的课程。我称之为Hashing.goodFast32Hash( HASH_KEY ),其中HASH_KEY等于0xC58F1A7B。

编辑我从dev获得了更多的信息:

我调用Files.hash(file,Hashing.goodFast32Hash(HASH_KEY));使用返回值,在返回的HashCode对象上调用"asInt()“。所以它是一个有符号的整数值(负值很好)。是的,HASH_KEY是传递给函数的种子值。

因为我不擅长Java,所以我仍然不知道在节点js中复制.

伙计们,这就是我的全部信息。有人看到我哪里出错了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-07 19:01:04

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

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

代码语言:javascript
复制
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");

输出以下内容到控制台:

代码语言:javascript
复制
<Buffer b4 0e 18 d3>
<Buffer b4 0e 18 d3>
-1274144557
hash from hashcodes file: -1274144557
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60547276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档