将字符串转换为唯一的长整型
本文关键字:长整型 唯一 字符串 转换 | 更新日期: 2023-09-27 17:57:03
我有一个由两部分组成的字符串(见代码)
我想知道返回长整型的 UnknownDeterministic函数,它可以确定性地为给定字符串生成相同的长整型。
private void MyProgram()
{
string resultStr = "XXX"+"12345678";
//1st part is a string of characters (the "XXX")
//2nd part is a string of numbers (the "12345678")
long resultLng = UnknownDeterministicFunction(myString);
}
private long UnknownDeterministicFunction(string inputStr)
{
// ???
}
这在 C# 中可能吗?
首先
- 有 8 个 ** (2 ** 30) 个不同的字符串(最长可达 2 GB)
- 有 2 ** 64 不同的长(这是 64 位整数)
所以你不能保证long
是独一无二的(老鸽子洞原则)。如果你已经准备好了可能的,虽然不可能的冲突(即不同的string
可以很好地返回相同的long
),你可能想要实现哈希函数,例如
字符串的哈希函数
或
字符串的良好哈希函数
通常,哈希函数返回Int32
;在这种情况下,只需将两个int
组合成一个long
int hash1 = GetHashOneAlgorithm(myString);
int hash2 = GetHashAnotherAlgorithm(myString);
long result = ((long) hash1 << 32) | hash2;
好的,答案很简单。
private long UnknownDeterministicFunction(string inputStr)
{
//not taking care of null...
return (long)inputStr.GetHashCode()
}