項目需求,需要將版本號轉換爲uint,ulong存儲
/// <summary>
/// 版本號轉無符號整數(每一項不能超過255)
/// </summary>
/// <param name="Target"></param>
/// <returns></returns>
public static uint ToUint(this Version Target)
{
uint newnum = 0;
if (Target.Major >= 0 && Target.Major <= 0xFF)
{
newnum |= (((uint)Target.Major) << 24);
}
if (Target.Minor >= 0 && Target.Minor <= 0xFF)
{
newnum |= (((uint)Target.Minor) << 16);
}
if (Target.Build >= 0 && Target.Build <= 0xFF)
{
newnum |= (((uint)Target.Build) << 8);
}
if (Target.Revision >= 0 && Target.Revision <= 0xFF)
{
newnum |= (((uint)Target.Revision) << 0);
}
return newnum;
}
/// <summary>
/// 版本號轉無符號整數(每一項不能超過65535)
/// </summary>
/// <param name="Target"></param>
/// <returns></returns>
public static ulong ToUlong(this Version Target)
{
ulong newnum = 0;
if (Target.Major >= 0 && Target.Major <= 0xFFFF)
{
newnum |= (((ulong)Target.Major) << 48);
}
if (Target.Minor >= 0 && Target.Minor <= 0xFFFF)
{
newnum |= (((ulong)Target.Minor) << 32);
}
if (Target.Build >= 0 && Target.Build <= 0xFFFF)
{
newnum |= (((ulong)Target.Build) << 16);
}
if (Target.Revision >= 0 && Target.Revision <= 0xFFFF)
{
newnum |= (((ulong)Target.Revision) << 0);
}
return newnum;
}
/// <summary>
/// 無符號整數轉版本號(每一項不能超過255)
/// </summary>
/// <param name="VersionNum"></param>
/// <param name="WithoutReversion"></param>
/// <returns></returns>
public static Version ParseVersionFromUint(uint VersionNum, bool WithoutReversion = false)
{
uint Major = (VersionNum & 4278190080u) >> 24;
uint Minor = (VersionNum & 16711680u) >> 16;
uint Build = (VersionNum & 65280u) >> 8;
if (WithoutReversion)
{
return new Version((int)Major, (int)Minor, (int)Build);
}
else
{
uint Revision = (VersionNum & 255u) >> 0;
return new Version((int)Major, (int)Minor, (int)Build,(int)Revision);
}
}
/// <summary>
/// 無符號整數轉版本號(每一項不能超過65535)
/// </summary>
/// <param name="VersionNum"></param>
/// <param name="WithoutReversion"></param>
/// <returns></returns>
public static Version ParseVersionFromUlong(ulong VersionNum, bool WithoutReversion = false)
{
ulong Major = (VersionNum & 18446462598732840960ul) >> 48;
ulong Mijor = (VersionNum & 281470681743360ul) >> 32;
ulong Build = (VersionNum & 4294901760ul) >> 16;
if (WithoutReversion)
{
return new Version((int)Major, (int)Mijor, (int)Build);
}
else
{
ulong Revision = (VersionNum & 65535ul) >> 0;
return new Version((int)Major, (int)Mijor, (int)Build, (int)Revision);
}
}
輸入
Version version0 = new Version(244, 233, 222, 211);
var result0 = version0.ToUint();
Console.WriteLine(result0);
Console.WriteLine(ParseVersionFromUint(result0));
Console.WriteLine("----------分割線----------------");
Version version = new Version(44444, 44443, 22222, 11111);
var result = version.ToUlong();
Console.WriteLine(result);
Console.WriteLine(ParseVersionFromUlong(result));
輸出
4108967635
244.233.222.211
----------分割線----------------
12510064747616283495
44444.44443.22222.11111