假设我有一个字符串
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
答案 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
*/