Оператор XOR и плавающие переменные - PullRequest
0 голосов
/ 25 октября 2019

Я решил сделать забавную криптографическую программу для личного пользования. Я хочу зашифровать переменные типа FLOATING POINT (Single)!

Но, конечно, это не сработает.

Ну, целочисленные значения работали правильно, а синглы - нет. Я потерял все запятые и точность. Я пытался ввести код ASM, но это не сработало. Знаете ли вы какой-нибудь метод, чтобы заставить это работать правильно?

Dim MyData as Single, MyKey as Single 'Long didnt work too

MyData = 0.0017627
Key = 17.1278

MyData = MyData XOR Key

'After this I lost my data!
MyData = MyData XOR Key

Хорошо, вы можете сказать что-то вроде "используйте C ++ и не копируйте мозг", но я предпочитаю использовать VB6.

О, если в VB.NET есть что-то полезное, я могу установить его на свой новый ноутбук 2010 года.

1 Ответ

1 голос
/ 25 октября 2019

Хотя в документации VB6 говорится, что оператору Xor требуются числовые переменные (https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-basic-6/aa242859(v=vs.60)),, это действительно означает целочисленные или длинные переменные.

Вы теряете точность ваших Single, потому чтооператор выполняет преобразование в целочисленный тип, по сути это:

MyData = CLng(MyData) Xor CLng(Key)

Вы можете увидеть это лучше, если вы Xor значение с плавающей запятой с 0, которое сохранит битовую комбинацию, поскольку она используетсяоператор (после неявного целочисленного преобразования).

Debug.Print 0 Xor 45.2     ' result: 45
Debug.Print 0 Xor 45.7     ' result: 46  (rounds up)
...