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

  

 

posted @ 2018-12-14 15:30  随时静听  阅读(852)  评论(0编辑  收藏  举报