尝试对两个数组的字节求和时发生溢出异常
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)
或将 Byte
与 Long
求和:
Dim sum As Long = CLng(value_array(1)) + myBytes1(1)
但不是:
Dim sum As Int64 = CLng(value_array(1) + myBytes1(1))
这里,在算术运算已经溢出Byte.MaxValue
之后进行转换。
我正在尝试对数组的第二个索引和另一个数组的第二个索引求和,并将总和分配给 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)
或将 Byte
与 Long
求和:
Dim sum As Long = CLng(value_array(1)) + myBytes1(1)
但不是:
Dim sum As Int64 = CLng(value_array(1) + myBytes1(1))
这里,在算术运算已经溢出Byte.MaxValue
之后进行转换。