Ваш код приводит к переполнению для типа данных, с которым вы работаете.
Поведение VB.NET по умолчанию - проверка арифметических операций, а на C# - проверка арифметических операций.
Добавить заявление checked вокруг вашего кода на C#, чтобы увидеть, что он также не работает.
checked {
// do all your work here, any overflow will cause an exception
}
Исправить ваш код, чтобы остановить переполнение. Как отмечают мои комментарии ниже, арифметическое переполнение не обязательно должно игнорироваться. Вы выполняете операции здесь, что приводит к вероятным неожиданным результатам, и вы должны явно указывать на это (увеличивая размер вашего типа или обрабатывая отказ).
Абсолютное последнее, что вы должны сделать (IMO), находится под вашими свойствами проекта, вкладкой «Компиляция», «Параметры расширенного компилятора», установите флажок «Удалить проверку переполнения целых чисел». Я лично считаю, что это плохая идея, и лично я использую checked
в C# всякий раз, когда делаю то, что переполнит мои переменные. Сбой рано, не всегда и все.
Можете ли вы показать нам декларацию «расшифрованной» переменной на обоих языках? – Matthieu
vb.net или предыдущее воплощение VB, где массивы основаны на 1 вместо 0? – xcud
байт [] decoded = новый байт [размер * 2]; – Barun