C#中的Java Integer.ValueOf方法等价与Radix参数

时间:2012-04-20 14:40:53

标签: c# java migration

我的任务是将这个Java代码迁移到C#版本,但是我遇到了ValueOf方法的问题,因为我似乎无法找到C#的等效版本(因为{{ 1}}在Java上使用的参数,在这种情况下为16)。

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;

提前致谢

3 个答案:

答案 0 :(得分:8)

如果您尝试解析十六进制(base-16)数字,请使用:

int.Parse (tmp, NumberStyles.HexNumber);

答案 1 :(得分:5)

您需要将字符串转换为整数,前提是该字符串位于特定的基础中。

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

答案 2 :(得分:1)

基数在Integer.valueOf()上,而不是你在那里显示的java代码中的s.substring(),所以这将成为:

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