首页 > 解决方案 > 运算符 XOR 和浮点变量

问题描述

我决定制作一个有趣的密码程序供个人使用。我想加密浮点(单)变量!

但是,当然,它不起作用。

好吧,整数值工作正常,但单打没有。我失去了所有的逗号和精确度。我尝试注入 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 年的新笔记本上。

标签: floating-pointvb6xor

解决方案


虽然 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)

推荐阅读