是否有一个通用公式可以为 512 个字符的文件路径提供唯一值,假设每个字符一个 32 位字节,并可能限制名称中使用的字符?
我知道,如果您只使用大写字母,则组合将远远超过 32 位 int,但是如何将标识字段与某个库一起使用,以便在给定文件路径的情况下,一旦分配的数字始终相同?这是一个想法,但我正在寻找一些标准公式,或者至少有人在现实世界中成功实施了它。
顺便说一句,我使用的是 C#,但任何语言都可以作为示例,或链接到网站。
谢谢
是否有一个通用公式可以为 512 个字符的文件路径提供唯一值,假设每个字符一个 32 位字节,并可能限制名称中使用的字符?
我知道,如果您只使用大写字母,则组合将远远超过 32 位 int,但是如何将标识字段与某个库一起使用,以便在给定文件路径的情况下,一旦分配的数字始终相同?这是一个想法,但我正在寻找一些标准公式,或者至少有人在现实世界中成功实施了它。
顺便说一句,我使用的是 C#,但任何语言都可以作为示例,或链接到网站。
谢谢
文件路径的哈希码是否足够唯一?
您可以使用 String.GetHashCode()。当然,它不会是唯一的,但两个相等的字符串将具有相同的哈希值。
查看此链接以获取使用 GetHashCode() 时查找哈希冲突的示例。
即使每个字符使用 1 位,结果也会是 512 位,超过 32 位,这意味着在某些情况下,两个不同的路径会生成相同的值。如果您的数据集是“所有 512 个字符路径”,那么您真正能做的就是在特定路径子集上寻找具有低冲突概率的哈希函数。
如果你可以用 32 位数字表示一个 512 字节的字符串,我只能说,多么好的压缩方法啊!
我知道你说的是 int,但是如果你可以使用字符串,你可以使用 md5 并且每个路径都会得到一个唯一的值。除此之外,我唯一能想到的就是通过递增为每个数字分配一个任意数字。不过,这不会为您提供真正的哈希,只需创建一个路径 ID ...
所以,换句话说,您正在寻找一个 .NET CRC32 实现,它以 UInt32 而不是 8 个字符的字符串形式返回其结果?
不幸的是,我见过的所有返回一个字节数组,包括这个。