5

私の仕事はこのJavaコードをC#バージョンに移行することですが、C#ValueOfと同等のバージョンが見つからないため(Radixこの場合はJavaで使用されるパラメーターのため)、メソッドに問題があります。 。

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

前もって感謝します

4

3 に答える 3

9

16進数(基数16)を解析しようとしている場合は、次を使用します。

int.Parse (tmp, NumberStyles.HexNumber);
于 2012-04-20T14:45:18.903 に答える
6

文字列が特定のベースにある場合は、文字列を整数に変換する必要があります。

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));
    }
于 2012-04-20T14:45:38.723 に答える
1

基数は、そこに表示されているJavaコードのs.substring()ではなく、Integer.valueOf()にあるため、次のようになります。

ai[j] = Int32.Parse(s.Substring(j * 2, j * 2 + 2), 16);
于 2012-04-20T14:51:47.550 に答える