假设我们有字符串name =“stackoverflow.com”;
如何将此字符串int转换为唯一ID或某种Hash。 (没有md5,因为它太大了)而且它不应该是随机的
我希望有类似的东西
请注意字符串本身太大我想知道字符串是否可以写得更短。字母,数字和符号的组合
f¤k^§〜7D?Æ
答案 0 :(得分:6)
如果不限制您的域名,这是不可能的。有无数的string
s因此不能被映射到任何有限集中。因此,独特性是不可能的。
如果您确实需要string
的唯一标识符,请使用string
本身。
答案 1 :(得分:1)
name.GetHashCode()
这可能是你最好的选择。任何形式的哈希都是一个常见的问题,它不能仅仅是唯一的,但是通过允许哈希更长,你可以使它更有可能是唯一的。
您还可以将不同的哈希算法相互结合使用,以增加支持的范围
修改强>
然后你可以创建一个自定义的Hashcode函数,例如
public static int GetHashCode (string value )
{
int h = 0;
for (int i = 0; i < value.Length; i ++)
h += value [i] * 31 ^ value.Length - (i + 1);
return h;
}
(从其他地方偷来的)
答案 2 :(得分:1)
如果你使用哈希,它需要足够长才能是唯一的,并且可能比你想要的更长。
你需要2^(BitLength/2) >> n
,其中BitLength是散列的长度,n是字符串的数量。
如果只使用Dictinary<string,int>
和计数器呢?
答案 3 :(得分:0)
杰森是对的 - 你不能创建一个有限大小的字符串唯一散列,其大小可以任意长。我向你提交你所寻找的不是哈希,而是compression algorithm on short strings。