2012-04-20 13 views
5

Il mio compito è quello di migrare questo codice Java in una versione C#, ma ho problemi con il metodo ValueOf, poiché non riesco a trovare una versione equivalente per C# (a causa del parametro Radix utilizzato su Java, 16 in questo caso).Equivalenza del metodo Java Integer.ValueOf in C# con parametro Radix

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; 

}

Ecco il mio tentativo, ma è venuto a mancare:

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; 
    } 

Grazie in anticipo

+0

Qualche motivo per il Down Vote? –

+0

Direi che il downvote è perché non hai spiegato cosa stai cercando di fare, e solo per scontato che uno sappia cosa significa il 16 nel codice java. – SimpleVar

risposta

8

Se si sta tentando di analizzare un esadecimale (base 16) il numero, utilizzare questo:

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

Y È necessario convertire una stringa in un numero intero, dato che la stringa si trova in una base specifica.

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

Quindi:

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

la radice è l'Integer.valueOf(), non s.substring() nel codice Java si mostra lì, quindi questo sarebbe diventato:

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