4

私の場合、BigInteger[]への変換が最適だと思います。これがJavaで書かれていて、共有したいと思っている人はいますか?

それで、私が任意のサイズを持っていると想像してくださいbyte[] = {0xff,0x3e,0x12,0x45,0x1d,0x11,0x2a,0x80,0x81,0x45,0x1d,0x11,0x2a,0x80,0x81} 。それをBigIntegerの配列に変換してから、元のバイト配列に安全に復元できるようにするにはどうすればよいですか?

事前にt​​y。

4

1 に答える 1

7

BigInteger.toByteArray()およびBigInteger(byte [])を使用します。

javadocによると、後者は...

BigIntegerの2の補数のバイナリ表現を含むバイト配列をBigIntegerに変換します。入力配列はビッグエンディアンのバイトオーダーであると想定されます。最上位バイトは0番目の要素にあります。

バイト単位の表現が異なる場合は、追加の変換を適用する必要がある場合があります。

編集-先頭の(つまり、重要でない)ゼロを保持する必要がある場合は、次のようにします。

  1. バイト配列からBigIntegerに変換するときは、バイト配列のサイズもメモしてください。この情報はBigInteger値にエンコードされていません。

  2. BigIntegerからバイト配列に変換するときは、バイト配列を元のバイト配列と同じ長さに符号拡張します。

編集2-バイト配列をそれぞれに最大NバイトのBigIntegersの配列に変換する場合は、サイズNの一時配列を繰り返し作成する必要があります1)入力バイト配列からのバイトで埋めます(最後に左パディング)および2)上記のコンストラクターを使用してBigInteger値を作成するために使用します。たぶん20行のコード?

Nしかし、私は率直に言って、実装しようとしている数学的アルゴリズムではなく、メモリ使用量に基づいて値を選択することに困惑しています。

于 2010-03-24T12:23:17.137 に答える