Delphi にある deencrypt 関数を C# に移植しようとしています。Delphi では、関数 Move を使用してポインターを使用してメモリにデータを取得するため、marshal.copy 関数を使用して同じ結果を得ようとしましたが、アクセス違反例外が発生したり、空白スペースが発生したりすることがあります。関数のコードを添付したままにします。何か案は?どうもありがとう!
public string prDecode(string s)
{
byte[] ArrayMap = new byte[256] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 62, 0, 0, 0, 63, 52, 53, 54, 55, 56, 57, 58, 59,60,
61, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
0, 0, 0, 0, 0, 0, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int I;
char[] ArrayS = s.ToCharArray(0, s.Length);
string resultado = "";
char[] ArrayR = resultado.ToCharArray(0, resultado.Length);
switch (s.Length)
{
case 2:
I = ArrayMap[ArrayS[0]] + (ArrayMap[ArrayS[1]] << 6);
ArrayR = new char[1];
Marshal.Copy((IntPtr)I, ArrayR, 0, ArrayR.Length);
break;
case 3:
I = ArrayMap[ArrayS[0]] + (ArrayMap[ArrayS[1]] << 6) +
(ArrayMap[ArrayS[2]] << 12);
ArrayR = new char[2];
Marshal.Copy((IntPtr)I, ArrayR, 0, ArrayR.Length);
break;
case 4:
I = ArrayMap[ArrayS[0]] + (ArrayMap[ArrayS[1]] << 6) +
(ArrayMap[ArrayS[2]] << 12) + (ArrayMap[ArrayS[3]] << 18);
ArrayR = new char[3];
Marshal.Copy((IntPtr)I, ArrayR, 0, ArrayR.Length);
break;
}
string clave = new string (ArrayR);
return clave;
}