目录
一、Convert.ToString(Int32, Int32) 方法
1.定义
2. 示例
二、Convert.ToInt64(String, Int32)
1.定义
2.实例
三、用Convert.ToString(Int32, Int32)和Convert.Tolnt64(String, Int32)进行数值转换
1.Main()
2.类库
3.生成效果
使用Convert.ToString(Int32, Int32)静态方法可以将十进制数值分别转换为二进制、八进制、十六进制。
使用Convert.Tolnt64(String, Int32)静态方法可以将二进制、八进制、十六进制数值的字符串表示转换为十进制数值。
一、Convert.ToString(Int32, Int32) 方法
将 32 位带符号整数的值转换为其指定基的等效字符串表示形式。
如果 value 为正并且 toBase 为 2、8 或 16,则返回的字符串使用符号和数量级表示形式。 如果 value 为负数且 toBase 为 2、8 或 16,则返回的字符串使用二的补数表示形式。 这意味着,最高阶字节 (位 31) 的高位位被解释为符号位。
1.定义
public static string ToString (int value, int toBase);参数
value Int32
要转换的 32 位带符号整数。toBase Int32
返回值的基数,必须是 2、8、10 或 16。返回
String
以 value 为基数的 toBase 的字符串表示形式。例外
ArgumentException
toBase 不是 2、8、10 或 16。
2. 示例
// Convert.ToString(Int32, Int32)
// 将整数数组中的每个元素转换为其等效的二进制、十六进制、十六进制和十六进制字符串表示形式。
namespace ConsoleApp13
{internal class Program{private static void Main(string[] args){ArgumentNullException.ThrowIfNull(args);int[] bases = [2, 8, 10, 16];int[] numbers = [ int.MinValue, -19327543, -13621, -18, 12,19142, int.MaxValue ];foreach (int baseValue in bases){Console.WriteLine("Base {0} conversion:", baseValue);foreach (int number in numbers){Console.WriteLine(" {0,-15} --> 0x{1}", number, //{0,-15} 代表格式输出{0}占位15个位Convert.ToString(number, baseValue));}}}}
}
// 运行结果:
/*
Base 2 conversion:-2147483648 --> 0x10000000000000000000000000000000-19327543 --> 0x11111110110110010001010111001001-13621 --> 0x11111111111111111100101011001011-18 --> 0x1111111111111111111111111110111012 --> 0x110019142 --> 0x1001010110001102147483647 --> 0x1111111111111111111111111111111
Base 8 conversion:-2147483648 --> 0x20000000000-19327543 --> 0x37666212711-13621 --> 0x37777745313-18 --> 0x3777777775612 --> 0x1419142 --> 0x453062147483647 --> 0x17777777777
Base 10 conversion:-2147483648 --> 0x-2147483648-19327543 --> 0x-19327543-13621 --> 0x-13621-18 --> 0x-1812 --> 0x1219142 --> 0x191422147483647 --> 0x2147483647
Base 16 conversion:-2147483648 --> 0x80000000-19327543 --> 0xfed915c9-13621 --> 0xffffcacb-18 --> 0xffffffee12 --> 0xc19142 --> 0x4ac62147483647 --> 0x7fffffff*/
二、Convert.ToInt64(String, Int32)
将指定基数的数字的字符串表示形式转换为等效的 64 位有符号整数。
1.定义
public static long ToInt64 (string? value, int fromBase);参数
value String
包含要转换的数字的字符串。fromBase Int32
value 中数字的基数,它必须是 2、8、10 或 16。返回
Int64
一个与 value 中数字等效的 64 位带符号整数,如果 value 为 null,则为 0(零)。例外
ArgumentException
fromBase 不是 2、8、10 或 16。
或
value(表示基数不为 10 的符号数字)的前缀为负号。ArgumentOutOfRangeException
value 上声明的默认值为 Empty。FormatException
value 包含一个字符,该字符不是由 fromBase 指定的基数中的有效数字。 如果 value 中的第一个字符无效,则该异常消息指示没有要转换的数字;否则,该消息指示 value 包含无效的尾随字符。OverflowException
value(表示基数不为 10 的符号数字)的前缀为负号。
或
value 表示小于 Int64.MinValue 或大于 Int64.MaxValue 的数字。注解
如果 fromBase 为 16,则可以在参数指定的 value 数字前面添加“0x”或“0X”。
2.实例
// Convert.ToInt64(String, Int32)
// 将字符串数组中的每个元素解释为十六进制字符串,并将其转换为长整数。
namespace ConsoleApp14
{public class Example{public static void Main(){string[] hexStrings = { "8000000000000000", "0FFFFFFFFFFFFFFF","f0000000000001000", "00A30", "D", "-13", "GAD" };foreach (string hexString in hexStrings){try{long number = Convert.ToInt64(hexString, 16);Console.WriteLine("Converted '{0}' to {1:N0}.", hexString, number);}catch (FormatException){Console.WriteLine("'{0}' is not in the correct format for a hexadecimal number.",hexString);}catch (OverflowException){Console.WriteLine("'{0}' is outside the range of an Int64.", hexString);}catch (ArgumentException){Console.WriteLine("'{0}' is invalid in base 16.", hexString);}}}}
}
// 运行结果:
/*
Converted '8000000000000000' to -9,223,372,036,854,775,808.
Converted '0FFFFFFFFFFFFFFF' to 1,152,921,504,606,846,975.
'f0000000000001000' is outside the range of an Int64.
Converted '00A30' to 2,608.
Converted 'D' to 13.
'-13' is invalid in base 16.
'GAD' is not in the correct format for a hexadecimal number.*/
三、用Convert.ToString(Int32, Int32)和Convert.Tolnt64(String, Int32)进行数值转换
1.Main()
// 进制转换
namespace _052
{public partial class Form1 : Form{private GroupBox? groupBox1;private Button? button1;private ComboBox? comboBox2;private ComboBox? comboBox1;private TextBox? textBox2;private TextBox? textBox1;private Label? label3;private Label? label2;private Label? label1;public Form1(){InitializeComponent();Load += Form1_Load;}private void Form1_Load(object? sender, EventArgs e){// // button1// button1 = new Button{Location = new Point(194, 68),Name = "button1",Size = new Size(75, 23),TabIndex = 7,Text = "开始转换",UseVisualStyleBackColor = true};button1.Click += Button1_Click;// // comboBox2// comboBox2 = new ComboBox{FormattingEnabled = true,Location = new Point(76, 66),Name = "comboBox2",Size = new Size(75, 25),TabIndex = 6};comboBox2.Items.AddRange(["十进制","二进制","八进制","十六进制"]);comboBox2!.SelectedIndex = 3;//初始化Cbox_select2默认选项// // comboBox1// comboBox1 = new ComboBox{FormattingEnabled = true,Location = new Point(194, 28),Name = "comboBox1",Size = new Size(75, 25),TabIndex = 5};comboBox1.Items.AddRange(["十进制","二进制","八进制","十六进制"]);comboBox1!.SelectedIndex = 0;//初始化Cbox_select默认选项 // // textBox2// textBox2 = new TextBox{Location = new Point(76, 106),Name = "textBox2",Size = new Size(192, 23),TabIndex = 4};// // textBox1// textBox1 = new TextBox{Location = new Point(76, 30),Name = "textBox1",Size = new Size(117, 23),TabIndex = 3};// // label3// label3 = new Label{AutoSize = true,Location = new Point(11, 112),Name = "label3",Size = new Size(68, 17),TabIndex = 2,Text = "转换结果:"};// // label2// label2 = new Label{AutoSize = true,Location = new Point(11, 74),Name = "label2",Size = new Size(68, 17),TabIndex = 1,Text = "欲转换为:"};// // label1// label1 = new Label{AutoSize = true,Location = new Point(11, 36),Name = "label1",Size = new Size(68, 17),TabIndex = 0,Text = "输入数值:"};SuspendLayout();// // groupBox1// groupBox1 = new GroupBox{Location = new Point(12, 12),Name = "groupBox1",Size = new Size(275, 147),TabIndex = 0,TabStop = false,Text = "进制转换"};groupBox1.Controls.Add(button1);groupBox1.Controls.Add(comboBox2);groupBox1.Controls.Add(comboBox1);groupBox1.Controls.Add(textBox2);groupBox1.Controls.Add(textBox1);groupBox1.Controls.Add(label3);groupBox1.Controls.Add(label2);groupBox1.Controls.Add(label1);groupBox1.SuspendLayout(); // // Form1// AutoScaleDimensions = new SizeF(7F, 17F);AutoScaleMode = AutoScaleMode.Font;ClientSize = new Size(299, 171);Controls.Add(groupBox1);Name = "Form1";StartPosition = FormStartPosition.CenterScreen;Text = "进制转换器"; groupBox1.ResumeLayout(false);groupBox1.PerformLayout();ResumeLayout(false);}private void Button1_Click(object? sender, EventArgs e){try{Action();//调用Action方法进行转换操作}catch (Exception ex){MessageBox.Show(//如果出现异常则提示错误信息ex.Message + " 请重新输入", "出错!");}}/// <summary>/// 此方法用于进制转换/// </summary>private void Action(){if (comboBox1!.SelectedIndex != 3)//判断用户输入是否为十六进制数{if (long.TryParse(textBox1!.Text, out long temp_value))//判断输入数值是否正确并赋值{if (comboBox1.SelectedIndex == 0)//判断用户输入的是否为十进制数{switch (comboBox2!.SelectedIndex){case 0:textBox2!.Text = textBox1.Text;//将十进制转为十进制break;case 1:textBox2!.Text = //将十进制转为二进制Transform.TenToBinary(long.Parse(textBox1.Text));break;case 2:textBox2!.Text = //将十进制转为八进制Transform.TenToEight(long.Parse(textBox1.Text));break;case 3:textBox2!.Text = //将十进制转为十六进制Transform.TenToSixteen(long.Parse(textBox1.Text));break;}}else{if (comboBox1.SelectedIndex == 1)//判断用户输入的是否为二进制数{switch (comboBox2!.SelectedIndex){case 0:textBox2!.Text = //将二进制转为十进制Transform.BinaryToTen(long.Parse(textBox1.Text));break;case 1:textBox2!.Text = textBox1.Text;//将二进制转为二进制break;case 2:textBox2!.Text = //将二进制转为八进制Transform.BinaryToEight(long.Parse(textBox1.Text));break;case 3:textBox2!.Text = //将二进制转为十六进制Transform.BinaryToSixteen(long.Parse(textBox1.Text));break;}}else{if (comboBox1.SelectedIndex == 2)//判断用户输入的是否为八进制数{switch (comboBox2!.SelectedIndex){case 0:textBox2!.Text = //将八进制转为十进制Transform.EightToTen(long.Parse(textBox1.Text));break;case 1:textBox2!.Text = //将八进制转为二进制Transform.EightToBinary(long.Parse(textBox1.Text));break;case 2:textBox2!.Text = textBox1.Text;//将八进制转为八进制break;case 3:textBox2!.Text = //将八进制转为十六进制Transform.EightToSixteen(long.Parse(textBox1.Text));break;}}}}}else{MessageBox.Show("请输入正确数值!", "提示!");//提示错误信息}}else{switch (comboBox2!.SelectedIndex){case 0:textBox2!.Text = //将十六进制转为十进制Transform.SixteenToTen(textBox1!.Text);break;case 1:textBox2!.Text = //将十六进制转为二进制Transform.SixteenToBinary(textBox1!.Text);break;case 2:textBox2!.Text = //将十六进制转为八进制Transform.SixteenToEight(textBox1!.Text);break;case 3:textBox2!.Text = //将十六进制转为十六进制textBox1!.Text;break;}}}}
}
2.类库
//类库
namespace _052
{internal class Transform{internal static string TenToBinary(long value)//将十进制转换为二进制{return Convert.ToString(value, 2);}internal static string TenToEight(long value)//将十进制转换为八进制{return Convert.ToString(value, 8);}internal static string TenToSixteen(long value)//将十进制转换为十六进制{return Convert.ToString(value, 16);}internal static string BinaryToEight(long value)//将二进制转换为八进制{return Convert.ToString(Convert.ToInt64(value.ToString(), 2), 8);}internal static string BinaryToTen(long value)//将二进制转换为十进制{return Convert.ToInt64(value.ToString(), 2).ToString();}internal static string BinaryToSixteen(long value)//将二进制转换为十六进制{return Convert.ToString(Convert.ToInt64(value.ToString(), 2), 16);}internal static string EightToBinary(long value)//将八进制转换为二进制{return Convert.ToString(Convert.ToInt64(value.ToString(), 8), 2);}internal static string EightToTen(long value)//将八进制转换为十进制{return Convert.ToInt64(value.ToString(), 8).ToString();}internal static string EightToSixteen(long value)//将八进制转换为十六进制{return Convert.ToString(Convert.ToInt64(value.ToString(), 8), 16);}internal static string SixteenToBinary(string value)//将十六进制转换为二进制{return Convert.ToString(Convert.ToInt64(value, 16), 2);}internal static string SixteenToEight(string value)//将十六进制转换为八进制{return Convert.ToString(Convert.ToInt64(value, 16), 8);}internal static string SixteenToTen(string value)//将十六进制转换为十进制{return Convert.ToUInt64(value, 16).ToString();}}
}
3.生成效果