我试图将一个数组的第二个索引与另一个数组的第二个索引求和,将总和分配给一个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
放入十六进制。
答案 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,因此不会发生溢出:
将Long
与Long
相加:
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
后 进行转换。