2017-07-06 7 views
0

私はインターネット上で見つけた解読関数を翻訳しています。この関数は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つの値を元のインデックスに戻すように見えます。

+0

それは要素3以降を使用して新しいリストを作ります。例えば。 '[1,2,3,4,5] [3:] == [4,5]' – smarx

+0

これは暗号化ではなく、ちょっと変わったエンコーディングです。 – zaph

答えて

0

彼は最初の3のためにあなたがC#のLINQと同等、Skip使用することができますを除いて、すべてのアイテムを取っている:Pythonで

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

を、あなたは[startingIndexを使用して、リストからいくつかの要素を取得することができます。EndingIndex ]

ARRの[:]をすべての要素

ARRを意味する[3] C#のequiva、3をスキップしウリエルは言及したように、残り

を取る手段貸しスキップ(カウント)

ARR = arr.Skip(3).ToArrayは()です。

、あなたは、この追加する必要があります。System.Linqのを使用して

を。

Pythonのスライス:Explain slice notation