我有一个32个字符长的文本,我想从中生成64位哈希。不需要安全性,但这将是一个巨大的优势。
我的代码将在嵌入式设备上运行,我无法加载扩展程序。因此,解决方案只需要使用SQLite函数。
如果我使用C ++编程,我会对以下内容感到满意:
char text[32];
int64 hash = 5381;
for (int i = 0; i < 32; ++i) {
hash = ((hash << 5) + hash) + c;
}
如何在SQLite中实现它?
答案 0 :(得分:1)
SQLite是一个嵌入式数据库,即它可以在应用程序中使用,您可以在其中创建用户定义的函数。
如果您确实只需要在SQL中执行此操作,则可以使用递归common table expression:
WITH RECURSIVE hash(id, h, rest) AS (
SELECT id, 5381, text
FROM MyTable
UNION ALL
SELECT id, (h * 33 + unicode(rest)) & 4294967295, substr(rest, 2)
FROM hash
WHERE rest != ''
)
SELECT id, h
FROM hash
WHERE rest = '';