根据文本创建一个数值
本文关键字:一个 文本 创建 | 更新日期: 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
的数字,可以使用Int64
(long
),如下所示:
string inputString = "My Test String ~!@#$%^&*()_+{}:<>?|"
int multiplier = 0;
long largeSum = 0;
foreach (char c in inputString)
{
largeSum += ((int)c) * ++multiplier;
}