将此行Java代码转换为C#代码

时间:2013-07-14 01:03:56

标签: c# java hex

我需要这行Java代码:

Integer.toString(256 + (0xFF & arrayOfByte[i]), 16).substring(1)

转换为C#,因为我不知道如何使用“0xFF”。

修改 这是完整的代码:

MessageDigest localMessageDigest = MessageDigest.getInstance("SHA-256");
      localMessageDigest.update(String.format(Locale.US, "%s:%s", new Object[] { paramString1, paramString2 }).getBytes());
      byte[] arrayOfByte = localMessageDigest.digest();
      StringBuffer localStringBuffer = new StringBuffer();
      for (int i = 0; ; i++)
      {
        if (i >= arrayOfByte.length)
          return localStringBuffer.toString();
        localStringBuffer.append(Integer.toString(256 + (0xFF & arrayOfByte[i]), 16).substring(1));
      }

2 个答案:

答案 0 :(得分:5)

关于这一点,在C#中实际执行此操作的方法如下:

String.Format("{0:x2}", arrayOfByte[i]);

这与Java非常相似

String.format("%02x", arrayOfByte[i]);

这是一种更简单的方式来完成他们正在做的事情。

答案 1 :(得分:1)

Java表达式将有符号字节转换为无符号,然后转换为十六进制,填充为零。

您应该能够在C#中编写代码。


FWIW,Java代码给出了相同的答案:

  Integer.toString(256 + arrayOfByte[i], 16).substring(1)

  String.format("%02x", arrayOfByte[i])

这是原作的原理。子表达式

  (0xFF & arrayOfByte[i])

相当于

  (0xFF & ((int) arrayOfByte[i]))

将有符号字节(-128到+127)转换为无符号字节(0到+255)。原始版本256 +的目的是确保toString的结果长度为3个十六进制数字。最后,删除前导数字,留下零填充的2位十六进制数字。