将字符串转换为唯一的长整型

本文关键字:长整型 唯一 字符串 转换 | 更新日期: 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()
}