#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 имеет гораздо лучшие альтернативы, не требует от вас возиться с глобальными параметрами сборки, которые также имеют сложные побочные эффекты.