我正在尝试将一些旧的VB代码转换为.Net,但是我遇到了Rnd函数的问题。
旧代码
Private Function Decode() As String
Dim r As Integer
Dim x As Integer
Dim c As Integer
Dom Code As String = "m[n-Msr0Xn*ca8qiGeIL""7'&;,_*EV{M;[{2bEmg8u!^s*+O37!692{-Y4IS"
x = Int(Rnd(-7))
For r = 1 To Len(Code)
x = Int(Rnd() * 96)
c = Asc(Mid(Code, r, 1))
c = c + x
If c >= 126 Then c = c - 126 + 32
Decode = Decode & Chr$(c)
Next
End Function
解码后的文字是“打赌你需要的不仅仅是铅笔和纸张才能得到这个!”
这就是我所做的:
Private Function Decode() As String
Dim r As Integer
Dim x As Integer
Dim c As Integer
Dim Answer As String
Dim Code As String = "m[n-Msr0Xn*ca8qiGeIL""7'&;,_*EV{M;[{2bEmg8u!^s*+O37!692{-Y4IS"
x = CType(Microsoft.VisualBasic.VBMath.Rnd(-7), Integer)
For r = 0 To sList.Length - 1
x = CType(Microsoft.VisualBasic.VBMath.Rnd() * 96 - 0.5, Integer)
c = Asc(sList.Substring(r, 1))
c = c + x
If c >= 126 Then c = c - 126 + 32
Answer &= Chr(c)
Next
Return Answer
End Function
但这就是我所得到的“打赌你需要的时间(用铅笔和纸来获得这个!”
我怀疑它是如何演员到一个int但我无法弄清楚如何。
答案 0 :(得分:0)
当我在Office VBA下运行你的“旧代码”(纠正错别字之后)(它应该与VB6具有相同的Rnd
实现)时,我得到的结果与你从VB.Net获得的结果相同。因此,分配给Code
的字符串中必定存在错误。
Public Function Decode() As String
Dim r As Integer
Dim x As Integer
Dim c As Integer
Dim Code As String
Code = "m[n-Msr0Xn*ca8qiGeIL""7'&;,_*EV{M;[{2bEmg8u!^s*+O37!692{-Y4IS"
x = Int(Rnd(-7))
For r = 1 To Len(Code)
x = Int(Rnd() * 96)
c = Asc(Mid(Code, r, 1))
c = c + x
If c >= 126 Then c = c - 126 + 32
Decode = Decode & Chr$(c)
Next
End Function
答案 1 :(得分:0)
感谢TnTinMan引导我找到解决方案。复制字符串时创建了问题。我使用的是I而不是l。使用的字体使这两个字符看起来完全相同。我也误认为'。'。
所以基本上我所要做的就是减去.5