OverflowException при попытке суммировать байты двух массивов - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь суммировать второй индекс массива и второй индекс другого массива, назначая сумму переменной 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 голосов
/ 14 января 2019

Арифметическая операция, которую вы выполняете, суммирует значение Byte в значение Byte.
Результат суммы затем присваивается типу переменной Long.
Назначение происходит после того, как операция была выполнена.

Так как вы суммируете от myBytes1(1) до value_array(1):

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

и value_array относятся к типу Byte, значение суммы превышает то, что может содержать Byte.MaxValue = 255.
Отсюда OverflowException.

Чтобы избежать исключения, приведите или преобразуйте суммируемое вами значение в тип назначения.
Поскольку это расширяющее преобразование , переполнение не может произойти:

Сумма 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...