十进制转其他进制的方法:Convert.ToString(value,format)
其他进制转十进制的方法:Convert.ToInt64(value,format)
非十进制转非十进制就是先把其转成十进制,然后再转成其他进制,具体效果如下:
代码如下:先建一个转换类
public class Transform { internal string TenToBinary(long value) { return Convert.ToString(value, 2); } internal string TenToEight(long value) { return Convert.ToString(value, 8); } internal string TenToSixteen(long value) { return Convert.ToString(value, 16); } internal string BinaryToEight(long value) { return Convert.ToString( Convert.ToInt64(value.ToString(), 2), 8); } internal string BinaryToTen(long value) { return Convert.ToInt64(value.ToString(), 2).ToString(); } internal string BinaryToSixteen(long value) { return Convert.ToString( Convert.ToInt64(value.ToString(), 2), 16); } internal string EightToBinary(long value) { return Convert.ToString( Convert.ToInt64(value.ToString(), 8), 2); } internal string EightToTen(long value) { return Convert.ToInt64(value.ToString(), 8).ToString(); } internal string EightToSixteen(long value) { return Convert.ToString( Convert.ToInt64(value.ToString(), 8), 16); } internal string SixteenToBinary(long value) { return Convert.ToString( Convert.ToInt64(value.ToString(), 16), 2); } internal string SixteenToEight(long value) { return Convert.ToString( Convert.ToInt64(value.ToString(), 16), 8); } internal string SixteenToTen(long value) { return Convert.ToUInt64(value.ToString(), 16).ToString(); } }
然后进行级联操作:
public partial class Form1 : Form { public Form1() { InitializeComponent(); comb_output.Items.AddRange(new object[] { "二进制", "八进制", "十进制", "十六进制"}); comb_input.SelectedIndex = 2; comb_output.SelectedIndex = 0; } private void btn_convert_Click(object sender, EventArgs e) { long l_long_value=0L; Transform l_class_t=new Transform(); try { if (long.TryParse(txt_input.Text, out l_long_value)) { if (comb_input.SelectedIndex == 0) { switch (comb_output.SelectedIndex) { case 0: { txt_output.Text = l_long_value.ToString(); break; } case 1: { txt_output.Text = l_class_t.BinaryToEight(l_long_value); break; } case 2: { txt_output.Text = l_class_t.BinaryToTen(l_long_value); break; } case 3: { txt_output.Text = l_class_t.EightToSixteen(l_long_value); break; } } } else if (comb_input.SelectedIndex == 1) { switch (comb_output.SelectedIndex) { case 0: { txt_output.Text = l_class_t.EightToBinary(l_long_value); break; } case 1: { txt_output.Text = l_long_value.ToString(); break; } case 2: { txt_output.Text = l_class_t.EightToTen(l_long_value); break; } case 3: { txt_output.Text = l_class_t.EightToSixteen(l_long_value); break; } } } else if (comb_input.SelectedIndex == 2) { switch (comb_output.SelectedIndex) { case 0: { txt_output.Text = l_class_t.TenToBinary(l_long_value); break; } case 1: { txt_output.Text = l_class_t.TenToEight(l_long_value); break; } case 2: { txt_output.Text = l_long_value.ToString(); break; } case 3: { txt_output.Text = l_class_t.TenToSixteen(l_long_value); break; } } } else if (comb_input.SelectedIndex == 3) { switch (comb_output.SelectedIndex) { case 0: { txt_output.Text = l_class_t.SixteenToBinary(l_long_value); break; } case 1: { txt_output.Text = l_class_t.SixteenToEight(l_long_value); break; } case 2: { txt_output.Text = l_class_t.SixteenToTen(l_long_value); break; } case 3: { txt_output.Text = l_long_value.ToString(); break; } } } } else { MessageBox.Show("请输入正确数值"); } } catch { MessageBox.Show("输入与所选进制不符"); } } }
当然这段程序有个BUG,由于本文主要目的在于理清转换关系,再次就不进解决了。
BUG 如下: