Моделирование переполнения байтов в VB.NET

#vb.net #byte #overflow #encode

#vb.net #байт #переполнение #кодировать

Вопрос:

Я хотел бы имитировать переполнение байтов в VB.NET . Приведенный ниже код дает правильный результат, но я подозреваю, что это не самый эффективный метод. Есть ли более простой / лучший способ добиться этого?

  Dim src As Byte = 232
 Dim key As Byte = 231
 Dim encoded As Byte = 0
 Dim decoded As Byte = 0

 ' Encode
 encoded = CByte((CInt(src)   CInt(key)) Mod 256I)

 ' Decode
 Dim tmp As Int32 = CInt(encoded) - CInt(key)
 decoded = CByte(IIf(tmp < 0, 256I   tmp, tmp))

 ' encoded = 207
 ' decoded = src = correct
  

Комментарии:

1. если вам нужна обратная связь по вашему рабочему коду, лучше спросить codereview.stackexchange.com

2. Хорошо, спасибо, я это сделаю.

Ответ №1:

Да, вы можете сделать это намного быстрее. Однако для этого требуется изменить параметр построения проекта. Добавьте новый проект в свое решение. Щелкните правой кнопкой мыши, Свойства, вкладка Сборки, прокрутите вниз, нажмите кнопку Дополнительные параметры компиляции. Установите флажок «Удалить проверки на переполнение целых чисел».

Теперь вы можете написать это так:

     Dim src As Byte = 232
    Dim key As Byte = 231
    Dim encoded As Byte = src   key
    Dim decoded As Byte = encoded - key
  

Что вы бы сделали в общедоступных методах, которые вы предоставляете из своего нового проекта.

Остерегайтесь очень сомнительной полезности шифра Цезаря, его слишком легко взломать. Система.Пространство имен Cryptography имеет гораздо лучшие альтернативы, не требует от вас возиться с глобальными параметрами сборки, которые также имеют сложные побочные эффекты.