C#System.OverflowException二进制到十进制和十六进制转换

时间:2016-01-01 10:10:32

标签: c# winforms

我目前正在构建一个c#winform应用程序来转换三个文本框,一个十进制,一个十六进制和一个二进制文件的输入。因此,您应在十进制文本框中输入十进制数字,等效的十六进制和二进制数字将出现在各自的文本框中。这是我用于转换的十进制和十六进制文本框的代码。

  private void textBox1_TextChanged(object sender, EventArgs e)
    {
        //conversion to hex and binary for the other texbox's

        if (button20WasClicked == false) { 
           long x = Int64.Parse(textBox1.Text);
           textBox2.Text = Convert.ToString(x,16).ToUpper();

           long y = Int64.Parse(textBox1.Text);
           textBox3.Text = Convert.ToString(y,2);

       }
        else
        {

        }
        button20WasClicked = false;
    }


 private void textBox2_TextChanged(object sender, EventArgs e)
    {

        if (button20WasClicked == false)
        {
            long x = Int64.Parse(textBox2.Text, System.Globalization.NumberStyles.HexNumber);
            textBox1.Text = Convert.ToString(x, 10);

            long y = Int64.Parse(textBox2.Text, System.Globalization.NumberStyles.HexNumber);
            textBox3.Text = Convert.ToString(y, 2);

        }
        else
        {

        }
        button20WasClicked = false;
    }

现在这些工作就像将十进制转换为十六进制和二进制(textBox1)以及十六进制转换为十进制和二进制(textBox2)的梦想,但是当我在文本框上尝试类似的方法来输入二进制转换为十进制和十六进制时我一直在溢出异常是未处理的错误,对于Int 64,值太大或太小。我已尝试更改为其他大小的变量,但得到相同的错误。我可以在互联网上找到的所有东西都表明我使用这种.Convert方法走在正确的轨道上,但却无法完成任何工作。以下是导致错误的最终文本框的代码。

  private void textBox3_TextChanged_1(object sender, EventArgs e)
    {
        if (button20WasClicked == false)
        {
            long x = Int64.Parse(textBox3.Text);
            textBox1.Text = Convert.ToString(x, 10);

            long y = Int64.Parse(textBox3.Text);
            textBox2.Text = Convert.ToString(y, 16);

        }
        else
        {

        }
        button20WasClicked = false;
    }

任何帮助表示赞赏,因为我已经解决了这个问题两天了。

1 个答案:

答案 0 :(得分:1)

您不应使用Parse方法。

long转换为字符串时,您正确使用允许指定基础的Convert.ToString重载

  

public static string ToString(long value,int toBase)

您缺少的是相应的反向Convert.ToInt64方法

  

static long ToInt64(string value,int fromBase)

很快,将三个地方的解析代码分别更改为

long x = Convert.ToInt64(textBox1.Text, 10);
long x = Convert.ToInt64(textBox2.Text, 16);
long x = Convert.ToInt64(textBox3.Text, 2);