0

第一步(i = 0)出现错误“OverflowException”。这段代码有什么问题?

    Dim byteArray As Byte() = { _
          0, 54, 101, 196, 255, 255, 255, 255, 0, 0, _
          0, 0, 0, 0, 0, 0, 128, 0, 202, 154, _
         59, 0, 0, 0, 0, 1, 0, 0, 0, 0, _
        255, 255, 255, 255, 1, 0, 0, 255, 255, 255, _
        255, 255, 255, 255, 127, 86, 85, 85, 85, 85, _
         85, 255, 255, 170, 170, 170, 170, 170, 170, 0, _
          0, 100, 167, 179, 182, 224, 13, 0, 0, 156, _
         88, 76, 73, 31, 242}

    Dim UintList As New List(Of UInt64)  
    For i As Integer = 0 To byteArray.Count - 1 Step 8 
        UintList.Add(BitConverter.ToInt64(byteArray, i))
    Next
4

1 回答 1

2

您的代码中有两个错误。

  1. BitConverter可以将字节转换为Int64值,然后尝试将其插入UInt64集合中。这可能会导致OverflowException,因为UInt64不能表示负值。

    您需要将BitConverter生成的内容与列表存储的内容相匹配,因此请执行以下任一操作(两者都不是!):

    • 替换BitConverter.ToInt64(…)BitConverter.ToUInt64(…)
    • 声明Dim UintList As New List(Of Int64)而不是 as List(Of UInt64)
  2. 您的数组的长度(75 个字节)不能被 8 整除,这将ArgumentException在最后一次循环迭代中导致 a 。BitConverter.ToInt64期望从指定的起始偏移量至少有 8 个字节可用i。但是,一旦它到达偏移量 72,就只剩下 4 个字节,这不足以产生一个Int64.

    因此,您需要检查是否还有足够的字节来转换:

    For i As Integer = 0 To byteArray.Count - 1 Step 8 
        If i + 8 <= byteArray.Length Then
            … ' enough bytes available to convert to a 64-bit integer
        Else
            … ' not enough bytes left to convert to a 64-bit integer
        End
    Next
    
于 2016-11-19T13:19:29.470 回答