Java Integer.ValueOf 方法等效性在 C# 中使用基数参数



我的任务是将此 Java 代码迁移到 C# 版本,但我在使用 ValueOf 方法时遇到了问题,因为我似乎找不到 C# 的等效版本(因为 Java 上使用的 Radix 参数,在本例中为 16)。

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

提前致谢

如果您尝试解析十六进制(以 16 为基数)的数字,请使用以下命令:

int.Parse (tmp, NumberStyles.HexNumber);

您需要将字符串转换为整数,因为该字符串位于特定基数中。

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

基数位于 Integer.valueOf() 上,而不是您在此处显示的 Java 代码中的 s.substring(),因此这将变为:

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

最新更新