根据文本创建一个数值

本文关键字:一个 文本 创建 | 更新日期: 2023-09-27 18:27:44

我在谷歌上搜索了allot,但没有任何结果我正在寻找

我想从C#中的任何字符串中获得一个数值

Ex。

var myString = "Oompa Loompa";
var numericoutput = convertStringToNumericValue(myString);

numericoutput的输出/值类似于612734818

所以当我放入另一个字符串时,比如"C4rd1ff InTernaT!onal is @ gr3at place#"int输出将类似于CCD_ 4。

值必须保持不变,例如,如果我再次输入"Oompa Loompa"的相同文本,那么我将再次获得612734818

我想也许可以使用Font Family来获得每个字符的字符索引,但我不知道从哪里开始。

这样做的原因是,我可以使用这个数字从包含其他数据的字符串中生成索引,并使用相同的输入字符串,再次获得相同的索引,以调用最终的输出字符串进行验证。

任何正确方向的帮助或指示都将不胜感激

根据文本创建一个数值

多亏了Tim,我最终完成了以下工作:

var InputString = "My Test String ~!@#$%^&*()_+{}:<>?|";
byte[] asciiBytes = Encoding.ASCII.GetBytes(InputString);
int Multiplier = 1;
int sum = 0;
foreach (byte b in asciiBytes)
{
    sum += ((int)b) * Multiplier;
    Multiplier++;
}

显然,这对1000个字符不起作用,但对短单词或句子来说已经足够了

int.MaxValue = 2 147 483 647

作为将字符串转换为字节的替代方法,如果哈希不能满足要求,这里有两种较短的方法来实现获取字符串的数值:

 string inputString = "My Test String ~!@#$%^&*()_+{}:<>?|"
 int multiplier = 0;
 int sum = 0;
 foreach (char c in inputString)
 {
   sum += ((int)c) * ++multiplier;
 }

如预期的那样,上述代码输出46026。唯一的区别是它循环遍历字符串中的字符并获取它们的ASCII值,并使用前缀++运算符(注意,在这种情况下multiplier设置为0,这也是int的默认值)。

根据Damith上面的评论,你可以对LINQ做同样的事情。只需将上面的foreach替换为:

sum = inputString.Sum(c => c * ++multiplier);

最后,如果您认为需要一个大于Int32.MaxValue的数字,可以使用Int64long),如下所示:

string inputString = "My Test String ~!@#$%^&*()_+{}:<>?|"
int multiplier = 0;
long largeSum = 0;
foreach (char c in inputString)
{
    largeSum += ((int)c) * ++multiplier;
}