2016-01-01 273 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'參數。 –

相關問題