二进制-八进制-十进制-16进制之间的转换
生活随笔
收集整理的這篇文章主要介紹了
二进制-八进制-十进制-16进制之间的转换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
進制之間的轉換
主要用到連個函數:
Convert.ToInt32(str,numbased):將字符串轉成str,按照numbeased指定的進制轉成10進制數;Convert.ToString(decimalNum,numbased):將十進制數decimalNum轉成numberbased指定的進制字符串
十進制轉 二進制,八進制,16進制
//10進制轉成二進制 Convert.ToString(999,2);//10進制轉成8進制 Convert.ToString(999,8);//10進制轉16進制 Convert.ToString(999,16);//或者 string.Format("{0:X}", 999);二進制 轉 8進制 ,10進制,16進制
// 2 進制轉 8進制//假如二進制是字符串 strb string strb="0101111"; int tmp =Convert.ToInt32(strb,2);//按照2進制解析成10進制數 //使用10進制轉成其他進制來進行轉換 Convert.ToString(tmp,8);//2 進制轉10,16進制都是這樣推導的8進制轉 2進制 10進制 ,16進制的方法同上
16進制 轉 2進制 8進制10進制? 同上
?
當對字符串轉成其他進制的過程中,需要對對應進制判斷是否符合進制數的要求:
使用正則來校驗 進制數字符串
//判斷是否是二進制 public static bool IsBinary(string str) {return Regex.IsMatch(str, "^[0-1]+$"); } //判斷是否是八進制數 public static bool IsOctal(string str) {return Regex.IsMatch(str, "^[0-7]+$"); } //判斷是否十進制數 public static bool IsDecimal(string str) {return Regex.IsMatch(str, "^[0-9]+$"); } //判斷是否十六進制數 public static bool IsHexDecimal(string str) {return Regex.IsMatch(str, "^[0-9A-Fa-f]+$"); }?
下面進入正題:效果圖
?
?
窗體代碼:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; //正則校驗 using System.Text.RegularExpressions;namespace Conversion {public partial class Form1 : Form{public Form1(){InitializeComponent();}private void btnConvert_Click(object sender, EventArgs e){Action();}//進制轉換實現方法private void Action(){//獲取輸入string input_str = textBoxInput.Text;switch(comboBoxBerforBase.SelectedIndex){case 0://二進制轉其他進制//根據選擇自動的進行轉換if(Transform.IsBinary(input_str)){textBoxResult.Text = new Transform().BinaryTo(input_str, comboBoxTargetBase.SelectedIndex);}else{MessageBox.Show("輸入的數字不是有效的二進制數", "提示");return;}break;case 1:if (Transform.IsOctal(input_str)){textBoxResult.Text = new Transform().OctalTo(input_str, comboBoxTargetBase.SelectedIndex);}else{MessageBox.Show("輸入的數字不是有效的八進制數", "提示");return;}break;case 2:if (Transform.IsDecimal(input_str)){textBoxResult.Text = new Transform().DecimalTo(input_str, comboBoxTargetBase.SelectedIndex);}else{MessageBox.Show("輸入的數字不是有效10進制數", "提示");return;}break;case 3:if (Transform.IsHexDecimal(input_str)){textBoxResult.Text = new Transform().HexDecimallTo(input_str, comboBoxTargetBase.SelectedIndex);}else{MessageBox.Show("輸入的數字不是有效16進制數", "提示");return;}break; }}} }新建TransForm類:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;//正則校驗 using System.Text.RegularExpressions; namespace Conversion {//使用反射應該更好===后期學完其他知識后,更新一下優化的代碼class Transform{//判斷是否是二進制public static bool IsBinary(string str){return Regex.IsMatch(str, "^[0-1]+$");}//判斷是否是八進制數public static bool IsOctal(string str){return Regex.IsMatch(str, "^[0-7]+$");}//判斷是否十進制數public static bool IsDecimal(string str){return Regex.IsMatch(str, "^[0-9]+$");}//判斷是否十六進制數public static bool IsHexDecimal(string str){return Regex.IsMatch(str, "^[0-9A-Fa-f]+$");}//二進制轉其他進制 2 --》 2 8 10 16public string BinaryTo(string str,int NumBased){string result = "";if(IsBinary(str))//如果是二進制{switch(NumBased){case 0://轉換成本身default://不在范圍內就原先字符碼顯示result = str;break;case 1://轉成8進制int tmp = Convert.ToInt32(str, 2);//十進制result = Convert.ToString(tmp,8);//十進制--》8進制break;case 2://轉成10進制result = Convert.ToInt32(str,2).ToString();break;case 3://轉成16進制result = string.Format("{0:X}", Convert.ToInt32(str, 2));break;}}return result;}//8進制轉其他進制 8 --》 2 8 10 16public string OctalTo(string str, int NumBased){string result = "";if (IsOctal(str))//如果是8進制{switch (NumBased){case 1://轉換成本身default://不在范圍內就原先字符碼顯示result = str;break;case 0://轉成2進制int tmp = Convert.ToInt32(str, 8);//十進制result = Convert.ToString(tmp, 2);//十進制--》2進制break;case 2://轉成10進制result = Convert.ToInt32(str, 8).ToString();break;case 3://轉成16進制result = string.Format("{0:X}", Convert.ToInt32(str, 8));break;}}return result;}//10進制轉其他進制 10--》 2 8 10 16public string DecimalTo(string str, int NumBased){string result = "";if (IsDecimal(str))//如果是8進制{switch (NumBased){case 2://轉換成本身default://不在范圍內就原先字符碼顯示result = str;break;case 0://轉成2進制int tmp_ = Convert.ToInt32(str, 10);//十進制result = Convert.ToString(tmp_, 2);//十進制--》2進制break;case 1://轉成8進制int tmp_1 = Convert.ToInt32(str, 10);result = Convert.ToString(tmp_1, 8);break;case 3://轉成16進制result = string.Format("{0:X}", Convert.ToInt32(str, 10));break;}}return result;}//16進制轉其他進制 16--》 2 8 10 16public string HexDecimallTo(string str, int NumBased){string result = "";if (IsHexDecimal(str))//如果是16進制{switch (NumBased){case 3://轉換成本身default://不在范圍內就原先字符碼顯示result = str;break;case 0://轉成2進制int tmp_ = Convert.ToInt32(str, 16);//十進制result = Convert.ToString(tmp_, 2);//十進制--》2進制break;case 1://轉成8進制int tmp_1 = Convert.ToInt32(str, 16);result = Convert.ToString(tmp_1, 8);break;case 2://轉成10進制result = Convert.ToInt32(str, 16).ToString();break;}}return result;}} }
?
轉載于:https://www.cnblogs.com/ssjt/articles/10119683.html
總結
以上是生活随笔為你收集整理的二进制-八进制-十进制-16进制之间的转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Rust错误处理
- 下一篇: 变频电源外围配置的全面要点