我有一个 Unicode/ UTF-16 编码路径。路径分隔符是 U+005C '\'。路径是以 null 结尾的根相对 Windows 文件系统路径,例如“\windows\system32\drivers\myDriver32.sys”
我想将此路径散列为64 位无符号整数。它不需要是“加密健全的”。哈希应该不区分大小写,但能够处理非 ascii 字母。显然,散列也应该很好地分散。
我有一些想法:
A) 使用 Windows 文件标识符作为“哈希”。在我的情况下,如果文件被移动,我确实希望哈希值发生变化,所以这不是一个选项。
B) 只需对整个字符串使用常规的 sting 散列:散列 += 素数 * 散列 + 代码点。
我确实觉得可以利用路径由“段”(文件夹名和最终文件名)组成的事实。
总结一下需求:
1) 64 位哈希
2) 文件系统路径的良好分布/很少冲突。
3) 高效
4) 不需要安全
5) 不区分大小写