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

发布时间:2024年01月18日

目录

一、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 + " 请重新输入", "出错!");
            }
        }
        /// <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.生成效果

?

文章来源:https://blog.csdn.net/wenchm/article/details/135676774
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。