1

我想将一个 vb .net 函数转换为 c#..我已经转换了它,但它没有按预期返回输出

VB .net 函数

 Public Function DecryptString(ByVal EncryptedString As String) As String

    Dim TempLine As String = Nothing
    Dim TempChar As String = Nothing
    Dim FinalStr As String = Nothing
    Dim i As Integer = 0
    Dim value As Integer = 0

    FinalStr = Nothing
    value = 0

    If EncryptedString <> "" Then
        For i = 1 To Len(EncryptedString)
            Try
                TempChar = Mid(EncryptedString, i, 1)
                value = Asc(TempChar)
                value = (value - (120))
                FinalStr = FinalStr & Chr(value)
            Catch
                DecryptString = ""
                Exit Function
            End Try
        Next
        DecryptString = FinalStr
        Exit Function
    End If

    DecryptString = ""
End Function

C# 函数

 public string DecryptString(string EncryptedString)
    {
        string substr = null;
        char TempChar; int ExtraChars = 0; string ExtraOnes = "";
        string FinalStr = null;
        int i = 0;
        int value = 0;
        FinalStr = null;
        value = 0;
        if ((EncryptedString != ""))
        {
            for (i = 1; (i <= EncryptedString.Length); i++)
            {
                try
                {
                    substr = EncryptedString.Substring((i - 1), 1);
                    TempChar = Convert.ToChar(substr);
                    value = (value - 120);
                    FinalStr = (FinalStr + ((char)(value)));
                }
                catch (System.Exception e)
                {

                    // TODO: Exit Function: Warning!!! Need to return the value
                    return "";
                }
            }
            return FinalStr;
        }
        return "";
    }

我无法找到为什么它没有恢复正确的输出

4

4 回答 4

2

我冒昧地清理了代码,因为这样更容易找到错误:

Public Function DecryptString(ByVal EncryptedString As String) As String

    Dim FinalStr As New StringBuilder
    Dim value As Integer = 0

    If not String.IsNullOrEmpty(EncryptedString) Then
        For Each c as Char in EncryptedString
            Try
                value = Asc(c)
                value -= 120
                FinalStr.Append(Chr(value))
            Catch
                Return ""
            End Try
        Next
    End If

    Return Finalstr.ToString

End Function

作为 C# 版本:

public string DecryptString(string EncryptedString) {

    StringBuilder FinalStr = new StringBuilder();
    int value = 0;

    if (!string.IsNullOrEmpty(EncryptedString)) {

        foreach (char c in EncryptedString) {
            try {
                value = (int)c;
                value -= 120;
                FinalStr.Append(((char)(value)));
            }
            catch (System.Exception e) {
                return "";
            }
        }
    }
    return Finalstr.ToString;
}

看看这是否适合你。

于 2012-10-13T06:25:30.457 回答
2

尝试这个:

VB.Net 到 C# 的转换

public string DecryptString(string EncryptedString)
{
    string functionReturnValue = null;

    string TempLine = null;
    string TempChar = null;
    string FinalStr = null;
    int i = 0;
    int value = 0;

    FinalStr = null;
    value = 0;

    if (!string.IsNullOrEmpty(EncryptedString)) {
        for (i = 1; i <= Strings.Len(EncryptedString); i++) {
            try {
                TempChar = Strings.Mid(EncryptedString, i, 1);
                value = Strings.Asc(TempChar);
                value = (value - (120));
                FinalStr = FinalStr + Strings.Chr(value);
            } catch {
                functionReturnValue = "";
                return functionReturnValue;
            }
        }
        functionReturnValue = FinalStr;
        return functionReturnValue;
    }

    functionReturnValue = "";
    return functionReturnValue;
}

参考:

1.) Strings.Asc Method(String):返回一个Integer值,表示一个字符对应的字符代码。(命名空间:Microsoft.VisualBasic)

2.) C# 中 VB 的 Asc() 和 Chr() 函数的等价物是什么?

对于 Asc() 您可以将 char 转换为 int,如下所示:

int i = (int)your_char;

对于 Chr(),您可以像这样从 int 转换回 char:

char c = (char)your_int;
于 2012-10-13T06:30:25.200 回答
1

问题是你输了(从不使用)TempChar

如果您只是进行此更改,那么您就回家了:

value = (TempChar - 120);
于 2012-10-13T06:27:29.090 回答
0

您永远不会将字符的值分配给value,因此您最终会得到 -120、-240 等。

这是另一种方法,无需所有字符串操作:

if (!String.IsNullOrEmpty(EncryptedString))
{
    for (i = 0; i < EncryptedString.Length; i++)
    {
        try
        {
            TempChar = EncryptedString[i];
            value = (int)TempChar - 120;
            FinalStr = FinalStr + (char)(value);
        }
        catch (System.Exception e)
        {
            // TODO: Exit Function: Warning!!! Need to return the value
            return "";
        }
    }
于 2012-10-13T06:28:24.520 回答