2014-03-30 88 views
-1

我想解密一個YouTube簽名參數。我發現了一些東西,但我無法理解迄今爲止發現的東西。將Python函數轉換爲Objective-C?

這裏是Python的功能:

if len(s) == 92: 
    return s[25] + s[3:25] + s[0] + s[26:42] + s[79] + s[43:79] + s[91] + s[80:83] 
elif len(s) == 90: 
    return s[25] + s[3:25] + s[2] + s[26:40] + s[77] + s[41:77] + s[89] + s[78:81] 
elif len(s) == 88: 
    return s[48] + s[81:67:-1] + s[82] + s[66:62:-1] + s[85] + s[61:48:-1] + s[67] + s[47:12:-1] + s[3] + s[11:3:-1] + s[2] + s[12] 
elif len(s) == 87: 
    return s[4:23] + s[86] + s[24:85] 
elif len(s) == 86: 
    return s[2:63] + s[82] + s[64:82] + s[63] 
elif len(s) == 85: 
    return s[2:8] + s[0] + s[9:21] + s[65] + s[22:65] + s[84] + s[66:82] + s[21] 
elif len(s) == 84: 
    return s[83:36:-1] + s[2] + s[35:26:-1] + s[3] + s[25:3:-1] + s[26] 
elif len(s) == 83: 
    return s[6] + s[3:6] + s[33] + s[7:24] + s[0] + s[25:33] + s[53] + s[34:53] + s[24] + s[54:] 
elif len(s) == 82: 
    return s[36] + s[79:67:-1] + s[81] + s[66:40:-1] + s[33] + s[39:36:-1] + s[40] + s[35] + s[0] + s[67] + s[32:0:-1] + s[34] 
elif len(s) == 81: 
    return s[6] + s[3:6] + s[33] + s[7:24] + s[0] + s[25:33] + s[2] + s[34:53] + s[24] + s[54:81] 

我如何轉換上面的Python功能於Objective-C的功能?

回答

3

它應該很簡單,但我不會完全完成你的工作,相反我會解釋括號是如何在Python中工作的。

如果我們假設sstrings[x]在X.返回字符

s = 'some long string' 
print s[3] 

打印出:

e 

所以要在Objective-C編寫:

NSString* s = @"some long string"; 
NSLog (@"%@", [s substringWithRange:NSMakeRange(3, 1)]); 

對於下次嘗試,我們h AVE s[x:y]

print s[3:7] 

這將打印出:

e lo 

爲了寫這在Objective-C,我們再次使用substringWithRange方法。只有

NSLog (@"%@", [s substringWithRange:NSMakeRange(3, 4)]); 

我們必須小心做了一些計算,因爲NSMakeRange需要長度作爲參數,而不是第二個索引。

而最後一個,我們有:s[x:y:z]

print s[3:7:2] 

這將打印出:

e 

只需要兩個字符3,所以e和空間

+運算符只是連接字符串。

閱讀字符串如何在Python在這裏完成:

而且在Apple Docs閱讀NSString文檔。

當然,您需要在switch或IF-ELSEIF子句中包裝這些語句,以使該函數的行爲與Python中的行爲相同。你在這裏所有的都是基本的字符串操作,你應該可以自己做,而不是要求別人去做,而不是你。

+0

謝謝你的解釋對我來說非常有幫助。感謝againg – Mahavir

1

最優雅的方式做到這一點將改變如果/ elif切換/大小寫。它會是這樣的:

switch (s.length) 
{ 
    case 92: 
      //something something 
      break; 
    case 90: 
      //something something 
      break; 
    default: 
      break; 
} 

和每個「返回」你必須單獨管理。 Python數組切片意味着例如在字符串s [3:6]中,您得到的子字符串從第3個字母開始到第4個結尾。在Objective-C中,你可以使用substringFromIndex: