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メソッド(String):文字に対応する文字コードを表す整数値を返します。(名前空間: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 に答える