从文本创建数值

时间:2014-10-25 09:46:17

标签: c# string integer numerical-methods

我在google上搜索了allot而没有任何我正在寻找的结果

我想从C#

中的任何字符串中获取数值

实施例

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

numericoutput的输出/值类似于612734818

所以当我输入另一个字符串时,请说"C4rd1ff InTernaT!onal is @ gr3at place#" int输出类似于73572753

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

我想可能会使用Font Family来获取每个角色的char索引,但我不知道从哪里开始。

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

非常感谢正确方向的任何帮助或观点

2 个答案:

答案 0 :(得分:1)

感谢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

答案 1 :(得分:1)

作为将字符串转换为字节数的替代方法,如果哈希值不符合要求,则可以使用以下几种方法来获取字符串的数值:

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

 foreach (char c in inputString)
 {
   sum += ((int)c) * ++multiplier;
 }

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

从Damith上面的评论中得到启示,你可以对LINQ做同样的事情。只需将上面的int替换为:

foreach

最后,如果您认为自己需要的数字大于sum = inputString.Sum(c => c * ++multiplier); ,则可以使用Int32.MaxValueInt64),如下所示:

long