簡體   English   中英

C#FormatException將Hex轉換為十進制時未處理

[英]C# FormatException Unhandled when converting Hex to decimal

所以我還在學習C#,我有點問題。 我正在制作一個非常簡單的Windows窗體應用程序,有兩個文本框,輸入和輸出,用於從十六進制到十六進制的轉換。 這是我的代碼:

        string input = textBox1.Text;
        int Output = Convert.ToInt32(input, 16);
        textBox2.Text = Output.ToString();

        //Textbox1 is Input
        //Textbox2 is Output

您可能會遇到兩個例外情況。 首先,是您描述的FormatException。 如果輸入字符串格式不正確,則會發生這種情況; 說它包含非十六進制字符,空格或其他內容。 您遇到的另一個例外是溢出異常,當第一個文本框中的十六進制變為對於32位整數而言太大的數字時。

要處理異常,您將需要一個try catch塊。 有關try catch的更多信息,請訪問https://msdn.microsoft.com/en-us/library/0yd65esw.aspx

使用一些錯誤檢查編寫此更好的方法可能如下所示:

string input = textBox1.Text;

try
{
    int Output = Convert.ToInt32(input, 16);
    textBox2.Text = Output.ToString();
}
catch (FormatException)
{
    MessageBox.Show("Input string is not in the correct format.");
}
catch (OverflowException)
{
    MessageBox.Show("Input is too large for conversion.");
}

//Textbox1 is Input
//Textbox2 is Output

正如Shar1er80和Landepbs指出的那樣,如果輸入正確,您提供的代碼不會出錯。 這是程序員驗證輸入不會出錯的工作。 您可以像Shar1er80建議的那樣使用正則表達式進行錯誤檢查,但也有其他方法。 您不僅需要檢查輸入是否包含轉換為十六進制的有效字符,還應檢查長度。 每個十六進制字符可以是16個可能值(0-F)中的一個。 將它們中的兩個放在一起產生256個可能的值,或恰好一個字節。 32位整數是4個字節,這意味着有效輸入的最大長度為8個字符。 更多,整數將溢出。

您還應該決定是否要使用有符號整數或無符號整數。 在有符號整數中,一位用於符號,因此可以輸出的最大正整數是無符號整數的一半。 您可以在https://msdn.microsoft.com/en-us/library/5kzh1b5w.aspx上閱讀有關整數的更多信息並進行簽名。

祝C#學習並堅持下去!

問題是什么? 這個代碼看起來不錯,只有一個例外,HEX限制為0 - 9和A - F.我建議為此添加輸入驗證。

編輯:檢查此SO答案以驗證十六進制輸入檢查字符串以查看是否所有字符都是十六進制值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM