如何为字符串生成唯一的整数 ID?
How to generate a unique integer id for string?
我有一个长字符串列表,应该反复比较它们。我正在寻找的是一种基于字符串值生成唯一整数值的方法,该字符串具有最少 RAM/CPU 使用率,并且可以完全信任。为相同的字符串生成值,应该总是 return 相同的值。我知道有很多基于某种 hashing/encrypting 机制的算法,但它们使用大量资源,而且速度不够快。提前致谢。
你可以使用某种校验和函数来处理字符串并为每个特定的字符串创建一个唯一的数字我在一个大型项目中为自己使用了一个函数,我希望它能有所帮助
private string GetChecksum(string text)
{
long sum = 0;
byte overflow;
for (int i = 0; i < text.Length; i++)
{
sum = (long)((16 * sum) ^ Convert.ToUInt32(text[i]));
overflow = (byte)(sum / 4294967296);
sum = sum - overflow * 4294967296;
sum = sum ^ overflow;
}
if (sum > 2147483647)
sum = sum - 4294967296;
else if (sum >= 32768 && sum <= 65535)
sum = sum - 65536;
else if (sum >= 128 && sum <= 255)
sum = sum - 256;
sum = Math.Abs(sum);
return sum.ToString();
}
我有一个长字符串列表,应该反复比较它们。我正在寻找的是一种基于字符串值生成唯一整数值的方法,该字符串具有最少 RAM/CPU 使用率,并且可以完全信任。为相同的字符串生成值,应该总是 return 相同的值。我知道有很多基于某种 hashing/encrypting 机制的算法,但它们使用大量资源,而且速度不够快。提前致谢。
你可以使用某种校验和函数来处理字符串并为每个特定的字符串创建一个唯一的数字我在一个大型项目中为自己使用了一个函数,我希望它能有所帮助
private string GetChecksum(string text)
{
long sum = 0;
byte overflow;
for (int i = 0; i < text.Length; i++)
{
sum = (long)((16 * sum) ^ Convert.ToUInt32(text[i]));
overflow = (byte)(sum / 4294967296);
sum = sum - overflow * 4294967296;
sum = sum ^ overflow;
}
if (sum > 2147483647)
sum = sum - 4294967296;
else if (sum >= 32768 && sum <= 65535)
sum = sum - 65536;
else if (sum >= 128 && sum <= 255)
sum = sum - 256;
sum = Math.Abs(sum);
return sum.ToString();
}