2012-04-20 31 views
5

Mi tarea es migrar este código Java a una versión C#, pero estoy teniendo problemas con el método ValueOf, ya que parece que no puedo encontrar una versión equivalente para C# (debido al parámetro Radix utilizado en Java, 16 en este caso).Java Integer.ValueOf equivalencia de método en C# Con parámetro 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; 

}

Aquí está mi intento, pero fracasó:

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

Gracias de antemano

+0

¿Alguna razón para el Voto Abajo? –

+0

Supongo que el voto a favor se debe a que no explicaste lo que estás tratando de hacer, y simplemente asumiste que uno sabría lo que significa el 16 en el código java. – SimpleVar

Respuesta

8

Si usted está tratando de analizar un hexadecimal (base 16) número, usa esto:

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

Y Debes convertir una cadena en un entero, dado que la cadena está en una base específica.

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

Así:

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

La raíz está en Integer.valueOf(), no s.substring() en el código java mostrar allí, por lo que este se convertiría en:

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