C#用Convert.ToString(Int32, Int32)和Convert.Tolnt64(String, Int32)进行数值转换

目录

一、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                 -->  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

 */     

二、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 + " 请重新输入", "出错!");
            }
        }
        /// 
        /// 此方法用于进制转换
        /// 
        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.生成效果

 C#用Convert.ToString(Int32, Int32)和Convert.Tolnt64(String, Int32)进行数值转换_第1张图片

你可能感兴趣的:(c#,开发语言)