尝试对两个数组的字节求和时发生溢出异常

OverflowException when trying to sum the Bytes of two Arrays

我正在尝试对数组的第二个索引和另一个数组的第二个索引求和,并将总和分配给 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

您正在执行的算术运算将 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,因此不会发生溢出:

Long 加到 Long

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

或将 ByteLong 求和:

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

但不是:

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

这里,在算术运算已经溢出Byte.MaxValue之后进行转换