System.Version與uint,ulong互相轉換

項目需求,需要將版本號轉換爲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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章