2012-04-20 34 views
5

Nhiệm vụ của tôi là di chuyển mã Java này sang phiên bản C#, nhưng tôi gặp sự cố với phương thức ValueOf, vì tôi dường như không tìm thấy phiên bản tương đương cho C# (vì tham số Radix được sử dụng trên Java, 16 trong trường hợp này).Tương đương phương thức Java Integer.ValueOf trong C# Với tham số 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; 

}

Đây là cố gắng của tôi, nhưng nó thất bại:

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

Cảm ơn trước

+0

Bất kỳ lý do gì để bỏ phiếu xuống? –

+0

Tôi cho rằng downvote là vì bạn không giải thích về những gì bạn đang cố gắng làm, và chỉ giả định người ta sẽ biết 16 có nghĩa là gì trong mã java. – SimpleVar

Trả lời

8

Nếu bạn đang cố gắng để phân tích một hệ thập lục phân (cơ số 16) số lượng, sử dụng điều này:

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

Y Bạn cần phải chuyển đổi một chuỗi thành một số nguyên, cho rằng chuỗi nằm trong một cơ sở cụ thể.

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

Vì vậy:

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

Cơ số là trên Integer.valueOf(), không s.substring() trong mã java bạn hiển thị ở đó, vì vậy đây sẽ trở thành:

ai[j] = Int32.Parse(s.Substring(j * 2, j * 2 + 2), 16); 
Các vấn đề liên quan