-3

我需要 c# 中的以下逻辑:

Dim sampleText As String, Key As String;
Dim KeyLength As Long,  Position As Long;
Dim character as integer;

For Position = 1 To Len(sampleText)
        character = Asc(Mid$(Key, (Position Mod KeyLength) - KeyLength * ((Position Mod KeyLength) = 0), 1))
        Mid$(sampleText, Position, 1) = Chr(Asc(Mid$(sampleText, Position, 1)) Xor character)
    Next Position
4

2 回答 2

3

你去:

C#

character = Strings.Asc(Strings.Mid(Key, (Position % KeyLength) - KeyLength * ((Position % KeyLength) == 0), 1));
Strings.Mid(sampleText, Position, 1) = Strings.Chr(Strings.Asc(Strings.Mid(sampleText, Position, 1)) ^ character);
于 2012-11-21T07:35:59.827 回答
0

VB 中的“Mid”语句没有直接等价的(与“Mid”函数不同):

string sampleText = null;
string Key = null;
long KeyLength = 0;
long Position = 0;
int character = 0;

for (Position = 1; Position <= sampleText.Length; Position++)
{
    character = Convert.ToInt32(Key[(Position % KeyLength) - KeyLength * ((Position % KeyLength) == 0) - 1]);
    SimulateMidStatement.MidStatement(sampleText, Position, (char)(Convert.ToInt32(sampleText[Position - 1]) ^ character), 1);
}

//----------------------------------------------------------------------------------------
//  Copyright © 2003 - 2012 Tangible Software Solutions Inc.
//  This class can be used by anyone provided that the copyright notice remains intact.
//
//  This class simulates the behavior of the classic VB 'Mid' statement.
//  (Note that this is unrelated to the VB 'Mid' function).
//----------------------------------------------------------------------------------------
public static class SimulateMidStatement
{
    public static void MidStatement(ref string target, int oneBasedStart, char insert)
    {
        if (target == null)
            return;

        target = target.Remove(oneBasedStart - 1, 1).Insert(oneBasedStart - 1, insert.ToString());
    }
    public static void MidStatement(ref string target, int oneBasedStart, string insert)
    {
        if (target == null || insert == null)
            return;

        target = target.PadRight(target.Length + insert.Length).Remove(oneBasedStart - 1, insert.Length).Insert(oneBasedStart - 1, insert).Substring(0, target.Length);
    }
    public static void MidStatement(ref string target, int oneBasedStart, string insert, int length)
    {
        if (target == null || insert == null)
            return;

        int minLength = System.Math.Min(insert.Length, length);
        target = target.PadRight(target.Length + insert.Length).Remove(oneBasedStart - 1, minLength).Insert(oneBasedStart - 1, insert.Substring(0, minLength)).Substring(0, target.Length);
    }
}
于 2012-11-21T07:53:10.583 回答