将解密函数从 Python 转换为 C#



我正在翻译我在互联网上找到的解密功能。该函数是用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:] 时,他们会做什么?对我来说,它似乎只是获取数组的前三个值并将它们写回其原始索引。

他拿走了所有物品,除了前 3 件。可以使用 C# LINQ 等效项,Skip

arr = arr.Skip(3).ToArray();

在 Python 中,您可以使用 [startingIndex:EndingIndex] 从列表中获取一些元素

arr[:] 表示所有元素

arr[3:] 表示跳过 3 并取其余部分

正如 Uriel 所提到的,C# 等价物是Skip(count(

到达 = 到达。跳过(3(。ToArray((;

你需要添加这个:

使用System.Linq;

Python 切片:解释切片表示法

最新更新