2012-11-24 40 views
0

这是一段提供例外的Visual Basic代码,FormatExceptionVisual Basic文件中的格式异常

假设我的十六进制值变量hexValue是424E0A78。代码正常工作。当下hexValue得到的值(比方说)424EA78,出现此异常:

提供的十六进制值是空或者格式不正确。使用以下格式:00000000

是否有解决方案?

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Try 
     Dim hexValue As String = "424E0A78" 

     Dim iInputIndex As Integer = 0 
     Dim iOutputIndex As Integer = 0 
     Dim bArray(3) As Byte 'creating an array 
     Dim rnum As Integer 
     Dim rArray(3) As Byte 
     Dim rSingle As Single 
     Dim rSingle1 As Single 
     Dim rSingle2 As Single 
     Dim rStr As Integer 
     Dim rnewArray(3) As Byte ' variables 
     Dim rnum2, rnum3 As Integer 'variables 
     Dim rstr2, rstr3 As String 

     'For iInputIndex = 0 To hexValue.Length - 1 Step 2 
     For iInputIndex = 0 To hexValue.Length - 1 Step 2 

      'rnum3 = hexValue.Chars(iInputIndex) * 16 

      'REjina code starts 
      rStr = 0 
      rstr2 = hexValue.Chars(iInputIndex) 
      If (rstr2 = "A") Then 
       rstr2 = 10 
      ElseIf (rstr2 = "B") Then 
       rstr2 = 11 
      ElseIf (rstr2 = "C") Then 
       rstr2 = 12 
      ElseIf (rstr2 = "D") Then 
       rstr2 = 13 
      ElseIf (rstr2 = "E") Then 
       rstr2 = 14 
      ElseIf (rstr2 = "F") Then 
       rstr2 = 15 
      End If 

      rStr = Val(rstr2) * 16 

      'Second rejina conversion 
      rstr2 = hexValue.Chars(iInputIndex + 1) 
      If (rstr2 = "A") Then 
       rstr2 = 10 
      ElseIf (rstr2 = "B") Then 
       rstr2 = 11 
      ElseIf (rstr2 = "C") Then 
       rstr2 = 12 
      ElseIf (rstr2 = "D") Then 
       rstr2 = 13 
      ElseIf (rstr2 = "E") Then 
       rstr2 = 14 
      ElseIf (rstr2 = "F") Then 
       rstr2 = 15 
      End If 

      rStr = rStr + Val(rstr2) 

      'rstr2 = hexValue.Chars(iInputIndex + 1) 
      rnewArray(iOutputIndex) = rStr 
      'rejina code ends 

      'rArray(iOutputIndex) = Byte.Parse(hexValue.Chars(iInputIndex) & hexValue.Chars(iInputIndex + 1), Globalization.NumberStyles.HexNumber) 

      'bArray(iOutputIndex) = Convert.ToByte(hexValue.Chars(iInputIndex)) 

      iOutputIndex += 1 
     Next 

     'Array.Reverse(rArray) 

     'rejina code starts 
     Array.Reverse(rnewArray) 
     'rejina code ends 

     'Array.Reverse(bArray) 


     'rSingle = BitConverter.ToSingle(rArray, 0) 
     'rejina code starts 
     rSingle1 = BitConverter.ToSingle(rnewArray, 0) 
     'rejina code ends 
     'rSingle2 = BitConverter.ToSingle(bArray, 0) 

     MessageBox.Show(rSingle1) 

     'Return BitConverter.ToSingle(rnewArray, 0) 
    Catch ex As Exception 
     Throw New FormatException("The supplied hex value is either empty or in an incorrect format. Use the following format: 00000000", ex) 
    End Try 
End Sub 
+5

Puhleeze不写这样的代码。使用Integer.TryParse()和NumberStyles.HexNumber参数。 –

+0

我以前只用过Parse。因为它也抛出了同样的例外,我就这样去了。但是在调试了很多之后,这个代码也出现了相同的异常。所以我只想知道VB是否提供了任何方法来克服这种异常。谢谢。 – user46646

+0

你得到的异常类型是什么?你的catch块捕获任何异常,所以很难知道确切的异常。但@HansPassant是正确的,你可以通过使用TryParse(而不是Parse)大大减少这段代码。 –

回答

1

如果输入字符串有一个奇怪的(即不连)长,那么你会得到一个数组索引越界异常就行了:

hexValue.Chars(iInputIndex + 1) 

...这是最有可能你在这里遇到什么。

+0

是的。你能告诉我VB是否提供了任何方法来克服这种异常? – user46646

+1

提示:== 123(换句话说:如果你的输入是奇数长度,只需加上一个前导零)。并按照Hans Passants的建议 - 使用TryParse/Parse! – igrimpe