我正在翻译我在互联网上找到的解密功能。该函数是用Python编写的,我将它翻译成C#。我有相当多的工作(希望是正确的),但有些语法我很难阅读。
这是原始功能:
def decrypt_signature(s):
arr = list(s)
arr[0], arr[52] = arr[52%len(arr)], arr[0]
arr.reverse()
arr = arr[3:]
arr[0], arr[21] = arr[21%len(arr)], arr[0]
arr.reverse()
arr = arr[3:]
arr.reverse()
return "".join(arr)
这是我到目前为止所翻译的内容:
private string DecryptSig(string s)
{
//arr = list(s)
char[] arr = s.ToArray();
//arr[0], arr[52] = arr[52%len(arr)], arr[0]
var temp = arr[0];
arr[0] = arr[52 % arr.Length];
arr[52 % arr.Length] = temp;
//arr.reverse()
arr.Reverse();
//arr = arr[3:]
//?????????????????
//arr[0], arr[21] = arr[21 % len(arr)], arr[0]
temp = arr[0];
arr[0] = arr[21 % arr.Length];
arr[21 % arr.Length] = temp;
//arr.reverse()
arr.Reverse();
//arr = arr[3:]
//??????????????????
//arr.reverse()
arr.Reverse();
//return "".join(arr)
return "" + new string(arr);
}
作者在写arr = arr [3:]时做了什么?对我来说,它似乎只是采用数组的前三个值并将它们写回原始索引。
答案 0 :(得分:0)
他正在接受所有项目,但前3项除外。您可以使用C#LINQ等效项Skip
:
arr = arr.Skip(3).ToArray();
答案 1 :(得分:0)
arr [:]表示所有元素
arr [3:]表示跳过3并取其余部分
正如Uriel所提到的,C#等价物 Skip(count)
arr = arr.Skip(3)。ToArray();
你需要添加:
使用System.Linq;
Python切片:Explain slice notation