2012-04-20 61 views
5

我的任務是將此Java代碼遷移到C#版本,但我在ValueOf方法中遇到問題,因爲我似乎找不到與C#(因爲在Java上使用Radix參數,在這種情況下爲16)。Java Integer.ValueOf C#中的方法等價與基數參數

public String decrypt_string(String s) 
{ 
    String s1 = ""; 
    int i = s.length()/2; 
    int[] ai = new int[i]; 

    for (int j = 0; j < i; j++) 
    { 
    // This is the "problematic" line \/ 
    ai[j] = Integer.valueOf(s.substring(j * 2, j * 2 + 2), 16).intValue(); 
    } 

    int[] ai1 = decrypt_block(ai, i); 

    for (int k = 0; k < i; k++) 
    { 
    if (ai1[k] != 0) 
     s1 = s1 + (char)ai1[k]; 
    } 

return s1; 

}

這裏是我的嘗試,但它失敗:

public String decrypt_string(String s) 
    { 
     String s1 = ""; 
     int i = s.Length/2; 
     int[] ai = new int[i]; 

     for (int j = 0; j < i; j++) 
     { 
      int startIndex = j * 2; 
      string tmp = s.Substring(startIndex, 2); 
      ai[j] = Int32.Parse (tmp); 
     } 

     int[] ai1 = decrypt_block(ai, i); 

     for (int k = 0; k < i; k++) 
     { 
      if (ai1[k] != 0) 
       s1 = s1 + (char)ai1[k]; 
     } 
     return s1; 
    } 

在此先感謝

+0

Down投票的任何原因? – 2012-04-20 14:44:23

+0

我猜想downvote是因爲你沒有解釋你正在做什麼,只是假設你會知道java代碼中的16是什麼意思。 – SimpleVar 2012-04-20 14:47:59

回答

8

如果你試圖解析十六進制(基數爲16)號,使用這個:

int.Parse (tmp, NumberStyles.HexNumber); 
5

Y您需要將字符串轉換爲整數,因爲該字符串位於特定的基礎中。

int i = Convert.ToInt32(str, 16); 
int j = Convert.ToInt32("A", 16); // 10 

所以:

for (int j = 0; j < i; j++) 
    { 
     int startIndex = j * 2; 
     ai[j] = Convert.ToInt32(s.Substring(startIndex, 2)); 
    } 
1

基數是Integer.valueOf(),而不是s.substring()在你那裏展示了Java代碼,因此這將成爲:

ai[j] = Int32.Parse(s.Substring(j * 2, j * 2 + 2), 16);