将句子转换为整数

时间:2017-04-25 16:26:15

标签: c# .net string

假设我有一个字符串

string version  = "Version 1.0.2.3"

我想将其转换为整数或数字,如“1232454982394”。 这应该根据我输入的文本而改变。 虽然一个选项是转换为ascii值或unicode,但我必须迭代每个字符。想知道是否有更简单的方法 - 就像一线方法可以实现这一点。

以下是有效的。但我正在寻找更好的东西

string version = "Version 1.0.2.3";
string finalOutput = "";
foreach (char c in version)
{
    finalOutput = finalOutput + ((int)c).ToString();
}

Console.WriteLine(finalOutput);
// Output is 861011141151051111103249464846504651 

2 个答案:

答案 0 :(得分:1)

一种方法是使用GetHashCode方法。

string version  = "Version 1.0.2.3";
var hashedValue = version.GetHashCode();

来自MSDN

  

哈希码是用于插入和标识的哈希码   基于散列的集合中的对象,例如   Dictionary(Of TKey,TValue)类,Hashtable类或类型   派生自DictionaryBase类。 GetHashCode方法提供   这个哈希码用于需要快速检查对象的算法   平等。

答案 1 :(得分:0)

我真的不喜欢GetHashCode选项,因为版本区间与哈希区间不同

string Version1023 = "Version 1.0.2.3";
string Version1024 = "Version 1.0.2.4";
string Version1033 = "Version 1.0.3.3";
string Version1034 = "Version 1.0.3.4";
Console.WriteLine(Version1023 + " => " + Version1023.GetHashCode());
Console.WriteLine(Version1024 + " => " + Version1024.GetHashCode());
Console.WriteLine(Version1033 + " => " + Version1033.GetHashCode());
Console.WriteLine(Version1034 + " => " + Version1034.GetHashCode());

/* =====[ Results ]=====
    Version 1.0.2.3 => -674112888
    Version 1.0.2.4 => -1433627775
    Version 1.0.3.3 => -674112889
    Version 1.0.3.4 => -1433627776
*/

我建议,并且只有当字符串保持相同的格式时,才会split字符串并集中于版本数字部分。对于四元素版本号,我们可以使用通用脚本,用于将IP4地址转换为long地址。 这是一个轻微的调整版本来执行此拆分和转换

public static long GetLongFromVersion(string VersionString) {
    string[] VersionSplit = VersionString.Split(` `);
    string VersionNumber = VersionSplit[1];
    string[] VersionBytes;
    double num = 0;

    if (!string.IsNullOrEmpty(VersionNumber)) {
        VersionBytes = VersionNumber.Split(`.`);
        for (int i = VersionBytes.Length - 1; i >= 0; i--) {
            num += ((int.Parse(VersionBytes[i]) % 256) * Math.Pow(256, (3 - i)));
        }
    }
    return (long)num;
}

当我们使用此方法转换版本号时,版本和结果将具有并行的间隔。

string Version1023 = "Version 1.0.2.3";
string Version1024 = "Version 1.0.2.4";
string Version1033 = "Version 1.0.3.3";
string Version1034 = "Version 1.0.3.4";
Console.WriteLine(Version1023 + " => " + GetLongFromVersion(Version1023));
Console.WriteLine(Version1024 + " => " + GetLongFromVersion(Version1024));
Console.WriteLine(Version1033 + " => " + GetLongFromVersion(Version1033));
Console.WriteLine(Version1034 + " => " + GetLongFromVersion(Version1034));

/* =====[ Results ]=====
    Version 1.0.2.3 => 16777731
    Version 1.0.2.4 => 16777732
    Version 1.0.3.3 => 16777987
    Version 1.0.3.4 => 16777988
*/