C# 2進制、8進制、10進制、16進制...各種進制間的轉換(一) convert 類中的方法


 

  常見的進制方式,主要有二進制,八進制,十進制和十六進制,通用的轉換方式是把非十進制的數據類型轉換成十進制的,然后再轉換成其他類型。

   在.NET Framework中,System.Convert 類中提供了較為全面的各種類型、數值之間的轉換功能。其中的兩個方法可以輕松的實現各種進制的數值間的轉換

 

一 、Convert 類中的轉換方法

 


 

1、Convert.ToInt32(string value, int fromBase); 
  把不同進制數值的字符串轉換為數字(十進制)

                       value 參數 要進行轉換的數值字符串

                       fromBase參數 要轉換成的進制格式,只能是2、8、10及16。 

Convert.ToInt32(”100111101″, 2); //二進制數 100111101 轉成十進制

Convert.ToInt32(”76″, 8);        //八進數 76 制轉成十進制

Convert.ToInt32(”FF”, 16);       // 16進數 FF 制轉換成十進制

 


2、Convert.ToString(int value, int toBase);
  可以把一個數字(十進制)轉換為不同進制數值的字符串格式,

       value 參數 要進行轉換的數字(十進制數)

                       toBase參數 要轉換成的進制格式,只能是2、8、10及16。

 

Convert.ToString(69, 2); //十進制數 69 轉二進制

Convert.ToString(69, 8); //十進制數 69 轉八進制

Convert.ToString(69, 16);//十進制數 69 轉十六進制

 

 

 二 、一個各進制自由轉換的方法

 


 

進制轉換的入口函數:

       /// <summary>
       /// 進制轉換
       /// </summary>
       /// <param name="input"></param>
       /// <param name="fromType">原來的進制格式</param>
       /// <param name="toType">要轉換成的進制格式</param>
       /// <returns></returns>
       public string ConvertGenericBinary(string input, byte fromType, byte toType)
       {
           string output = input;
           switch (fromType)
           { 
               case 2:
                   output = ConvertGenericBinaryFromBinary(input,toType);
                   break;
               case 8:
                   output = ConvertGenericBinaryFromOctal(input,toType);
                   break;
               case 10:
                   output = ConvertGenericBinaryFromDecimal(input,toType);
                   break ;
               case 16:
                   output = ConvertGenericBinaryFromHexadecimal(input,toType);
                   break;
               default:
                   break;
           }
           return output;
       }     
進制轉換的入口函數

 

從二進制轉換到其他格式:

       /// <summary>
       /// 從二進制轉換成其他進制
       /// </summary>
       /// <param name="input"></param>
       /// <param name="toType"></param>
       /// <returns></returns>
       private string ConvertGenericBinaryFromBinary(string input,  byte toType)
       {           
           switch (toType)
           { 
               case 8:
                   //先轉換成十進制然后轉八進制
                   input = Convert.ToString(Convert.ToInt32(input, 2), 8);
                   break;
               case 10:
                   input =  Convert.ToInt32(input, 2).ToString();
                   break;
               case 16:
                   input = Convert.ToString(Convert.ToInt32(input, 2), 16);
                   break;
               default:
                   break; 
           }
           return input;
       }
從二進制轉換到其他格式 

 

從八進制轉換成其他格式:

       /// <summary>
       /// 從八進制轉換成其他進制
       /// </summary>
       /// <param name="input"></param>
       /// <param name="toType"></param>
       /// <returns></returns>
       private string ConvertGenericBinaryFromOctal(string input, byte toType)
       {
           switch (toType)
           {
               case 2:
                   input =  Convert.ToString(Convert.ToInt32(input, 8), 2);
                   break;
               case 10:
                   input = Convert.ToInt32(input, 8).ToString();
                   break;
               case 16:
                   input = Convert.ToString(Convert.ToInt32(input, 8), 16);
                   break;
               default:
                   break;
           }
           return input;
       }
從八進制轉換成其他格式

 

從十進制轉換到其他格式:

       /// <summary>
       /// 從十進制轉換成其他進制
       /// </summary>
       /// <param name="input"></param>
       /// <param name="toType"></param>
       /// <returns></returns>
       private string ConvertGenericBinaryFromDecimal(string input, int toType)
       {
           string output = "";
           int intInput = Convert.ToInt32(input);
           switch (toType)
           {
               case 2:
                   output = Convert.ToString(intInput, 2);
                   break;
               case 8:
                   output = Convert.ToString(intInput, 8);
                   break;
               case 16:
                   output = Convert.ToString(intInput, 16);
                   break;
               default:
                   output = input;
                   break;
           }
           return output;
       }
從十進制轉換到其他格式

 

從十六進制轉換到其他格式:

       /// <summary>
       /// 從十六進制轉換成其他進制
       /// </summary>
       /// <param name="input"></param>
       /// <param name="toType"></param>
       /// <returns></returns>
       private string ConvertGenericBinaryFromHexadecimal(string input, int toType)
       {
           switch (toType)
           {
               case 2:
                   input = Convert.ToString(Convert.ToInt32(input, 16), 2);
                   break;
               case 8:
                   input = Convert.ToString(Convert.ToInt32(input, 16), 8);
                   break;
               case 10:
                   input = Convert.ToInt32(input, 16).ToString();
                   break;
               default:
                   break;
           }
           return input;
       }
從十六進制轉換到其他格式 

 

 

 三、各進制數的運算

 


 

  把各進制數轉換成 十進制數進行計算,然后再轉換成原類型。

舉例一個二進制之間的加法:

       /// <summary>
       /// 二進制之間的加法
       /// </summary>
       /// <param name="x"></param>
       /// <param name="y"></param>
       /// <returns></returns>
       public string AddBetweenBinary(string x, string y)
       {
           int intSum = Convert.ToInt32(x, 2) + Convert.ToInt32(y, 2);
           return Convert.ToString(intSum,2) ;
       }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM