【发布时间】:2022-01-03 07:55:12
【问题描述】:
我正在使用 firebase firestore,出于某种原因,我需要将每个新用户文档 ID 散列为整数,特别是 16Bit UTF 整数。主要是尝试在 Dart 中复制 .hashcode 方法。
我发现并尝试过的是这个
// Convert to 32bit integer
const hashFunction = (string) => {
var hash = 0;
if (string.length == 0) return hash;
for (i = 0; i < string.length; i++) {
char = string.charCodeAt(i);
hash = (hash << 5) - hash + char;
hash = hash & hash;
}
return hash >>> 0; // returns hash as positive integer
};
但这只能转换为 32 位 int。感谢您提供任何和所有帮助。
EDIT1:使用@selbie 的更改我取得了一些进展,但我得到的哈希与 Dart 和 中的 .hashCode 方法完全不同
反正我能得到同样的结果吗
【问题讨论】:
-
"我需要将每个新的用户文档 ID 散列为整数" - 你认为为什么需要这样做?你为什么要做这个客户端?
-
变量
hash应该是什么数据类型?整数16?整数32? uint32? uint16?还有什么? -
@Dai 实际上我是通过服务器上的云功能来实现的
-
@Thomas uint16 我认为
-
2328644不是 16 位值。那至少是22位。您从哪里获得hashFunction的源代码?我无法在 dart 存储库中找到该函数。
标签: javascript hash hashcode utf-16 16-bit