常見的進位方式,主要有二進位,八進位,十進位和十六進位,通用的轉換方式是把非十進位的數據類型轉換成十進位的,然後再轉換成其他類型。 在.NET Framework中,System.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) ; }