0

Java ライブラリを C# に変換しているので、レガシー アプリケーションを書き直しています。サポートが必要です。Java のこの行が何をしているのかを理解する必要があります。

sb.append(Integer.toHexString((b & 0xFF) | 0x100).substring(1,3))

そして、このC#行が同等である場合

result += (Convert.ToInt32(b).ToString("x2") + " ").Substring(1,3);

どちらの場合も、b は、コードがループしている SHA-1 ハッシュからのバイトです。私が理解していない Java の部分は ((b & 0xFF) | 0x100) です。パディングしているように見えますか?

通常、私は Java アプリケーションからの出力を私の C# が生成しているものと比較しますが、今はそれを行う立場にありません (そして、それは私をイライラさせます - 信じてください)。

4

2 に答える 2

2

オリジナルを大幅に変更する必要はありません - C# の同等物 ('sb' が StringBuilder であると仮定) は次のとおりです。

sb.Append(((b & 0xFF) | 0x100).ToString("x").Substring(1, 2));
于 2013-06-04T15:08:03.573 に答える
1

b & 0xFF最下位バイトをマスクします。つまりb、0x00 から 0xFF の間の値が得られます。

結果の整数では、以前の値に関係なく、9 番目のビットが設定されます。したがって、0x0100 から 0x01FF の間に何かが表示されます。

その文字列から、インデックス 1 から 3 までの部分文字列が切り取られます。00からFFの間の最後の2桁が表示されます。|0x100 は、Integer.toHexString で最後の 2 桁の先頭に 0 を与える巧妙なトリックです。これは、javadoc によるとそうではありません ...

私の記憶が正しければ、あなたの C# コードはまったく同じではありません。しかし、この説明であなたが自分でそれを構築できることを願っています:)

于 2013-06-04T15:02:28.360 に答える