-1

次の Java コード行が必要です。

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

「0xFF」の扱いがわからないのでC#に変換。

編集 これは完全なコードです:

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

2 に答える 2

6

その点で、C# でこれを行う実際の方法は次のとおりです。

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

これはJavaに非常に似ています

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

これは、上記で行っていることを行うためのより簡単な方法です。

于 2013-07-14T01:42:27.133 に答える
1

そのJava式は、符号付きバイトを符号なしに変換してから、ゼロで埋めた16進数に変換しています。

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 桁の 16 進数になるようにすることです。最後に、先頭の数字が削除され、ゼロが埋め込まれた 2 桁の 16 進数が残ります。

于 2013-07-14T01:29:19.213 に答える