尝试对两个数组的字节求和时发生OverflowException

时间:2019-01-14 05:16:52

标签: arrays vb.net overflow

我试图将一个数组的第二个索引与另一个数组的第二个索引求和,将总和分配给一个Int64变量:

Dim value_array(60) As Byte
Dim myBytes1() As Byte = MyStringConversions.StringToByteArray(Substr_Cid) 
Dim sum As Int64

value_array(1) = &HFE
myBytes1(1) = &HFC
sum = value_array(1) + myBytes1(1)

我得到一个OverflowException
我不知道为什么,Int64可以轻松地将01FA放入十六进制。

1 个答案:

答案 0 :(得分:0)

您要执行的算术运算将Byte值与Byte值相加。
然后将总和的结果分配给Long变量类型。
分配在执行操作后发生。

由于您将myBytes1(1)value_array(1)相加:

Dim sum As Int64 = value_array(1) + myBytes1(1)

并且value_array的类型为Byte,总和值超出了Byte.MaxValue = 255可以包含的值。
因此,OverflowException

为避免异常,请将您求和的值强制转换或转换为目标类型。
由于这是widening conversion,因此不会发生溢出:

LongLong相加:

Dim sum As Long = CType(value_array(1), Long) + CType(myBytes1(1), Long) 

或将Byte加到Long

Dim sum As Long = CLng(value_array(1)) + myBytes1(1)

但不是:

Dim sum As Int64 = CLng(value_array(1) + myBytes1(1))

此处,在算术运算已溢出Byte.MaxValue 进行转换。