二进制-八进制-十进制-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 16
public 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 16
public 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 16
public 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 16
public 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;
}
}
}

浙公网安备 33010602011771号