目录
一、Convert.ToString(Int32, Int32) 方法
二、Convert.ToInt64(String, Int32)
三、用Convert.ToString(Int32, Int32)和Convert.Tolnt64(String, Int32)进行数值转换
????????使用Convert.ToString(Int32, Int32)静态方法可以将十进制数值分别转换为二进制、八进制、十六进制。
????????使用Convert.Tolnt64(String, Int32)静态方法可以将二进制、八进制、十六进制数值的字符串表示转换为十进制数值。
????????将 32 位带符号整数的值转换为其指定基的等效字符串表示形式。
????????如果 value 为正并且 toBase 为 2、8 或 16,则返回的字符串使用符号和数量级表示形式。 如果 value 为负数且 toBase 为 2、8 或 16,则返回的字符串使用二的补数表示形式。 这意味着,最高阶字节 (位 31) 的高位位被解释为符号位。?????????
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。
// 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 --> 0x11111111111111111111111111101110
12 --> 0x1100
19142 --> 0x100101011000110
2147483647 --> 0x1111111111111111111111111111111
Base 8 conversion:
-2147483648 --> 0x20000000000
-19327543 --> 0x37666212711
-13621 --> 0x37777745313
-18 --> 0x37777777756
12 --> 0x14
19142 --> 0x45306
2147483647 --> 0x17777777777
Base 10 conversion:
-2147483648 --> 0x-2147483648
-19327543 --> 0x-19327543
-13621 --> 0x-13621
-18 --> 0x-18
12 --> 0x12
19142 --> 0x19142
2147483647 --> 0x2147483647
Base 16 conversion:
-2147483648 --> 0x80000000
-19327543 --> 0xfed915c9
-13621 --> 0xffffcacb
-18 --> 0xffffffee
12 --> 0xc
19142 --> 0x4ac6
2147483647 --> 0x7fffffff
*/
????????将指定基数的数字的字符串表示形式转换为等效的 64 位有符号整数。
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”。
// 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.
*/
// 进制转换
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;
}
}
}
}
}
//类库
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();
}
}
}
?