Microsoft.VisualBasic.VBMath.Rnd与旧的VB Rnd()函数有什么不同?

时间:2017-04-26 17:16:20

标签: vb.net

我正在尝试将一些旧的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但我无法弄清楚如何。

2 个答案:

答案 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