2016-01-01 228 views
0

我目前正在建立一个C#winform应用程序来转换来自三个文本框,一个十进制,一个十六进制和一个二进制文本的输入。所以你应该在十进制文本框中输入你的十进制数,等价的十六进制和二进制数将出现在它们各自的文本框中。以下是我用于转换的十进制和十六进制文本框的代码。C#System.OverflowException二进制到十进制和十六进制转换

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

Int64.Parse不知道输入的是二进制的,因此。 –

回答

1

您不应该使用Parse方法。

当您转换long字符串,正确使用Convert.ToString重载允许指定基本

公共静态字符串的ToString(长期价值,诠释至基站)

你所缺少的是对应的反向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); 
+0

不得不对另一个按钮做一些调整,但文本框完美谢谢。 – Dcoto

+0

解析方法不适用于此的原因吗? –

+0

@NicFoster你应该问BCL的设计师。可能是因为没有用于二进制的标准格式/ NumberStyle标志。你可以从[参考源](http://referencesource.microsoft.com/#mscorlib/system/parsenumbers.cs,a2f1024cea1a0852)看到,有一个特殊的工具类只用于'Convert'类方法,它支持'base'参数。 –

相关问题