BitConverter.ToInt64 溢出异常
BitConverter.ToInt64 OverflowException
我在第一步 (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
您的代码中有两个错误。
您让 BitConverter
将您的字节转换为 Int64
值,您尝试将其插入到 UInt64
集合中。这会导致OverflowException
,因为UInt64
不能表示负值
您需要将 BitConverter
生成的类型与您的列表存储的内容相匹配,因此请执行以下任一操作(不能同时执行!):
- 将
BitConverter.ToInt64(…)
替换为BitConverter.ToUInt64(…)
。
- 声明
Dim UintList As New List(Of Int64)
而不是 List(Of UInt64)
。
您的数组长度(75 字节)不能被 8 整除,这将在最后一次循环迭代中导致 ArgumentException
. BitConverter.ToInt64
期望从指定的起始偏移量 i
起至少有 8 个字节可用。但是,一旦到达偏移量 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
我在第一步 (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
您的代码中有两个错误。
您让
BitConverter
将您的字节转换为Int64
值,您尝试将其插入到UInt64
集合中。这会导致OverflowException
,因为UInt64
不能表示负值您需要将
BitConverter
生成的类型与您的列表存储的内容相匹配,因此请执行以下任一操作(不能同时执行!):- 将
BitConverter.ToInt64(…)
替换为BitConverter.ToUInt64(…)
。 - 声明
Dim UintList As New List(Of Int64)
而不是List(Of UInt64)
。
- 将
您的数组长度(75 字节)不能被 8 整除,这将在最后一次循环迭代中导致
ArgumentException
.BitConverter.ToInt64
期望从指定的起始偏移量i
起至少有 8 个字节可用。但是,一旦到达偏移量 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