2016-11-19 11 views
-2

バイト配列0x00 0x02 0x03 0x00を作成するJavaプログラムがあります。私はBigIntegerタイプに変換します。しかし、バイト配列に変換すると、先行ゼロのない出力が得られます2 3 0。コードは次のとおりです。Java:出力で先行ゼロを保持する

byte[] b = new byte[] {0x00, 0x02, 0x03, 0x00}; 
BigInteger b1 = new BigInteger(b); 
byte[] b2 = b1.toByteArray(); 

for (byte aB2 : b2) 
    System.out.print(aB2 + " "); 

先行ゼロはどのように保持できますか?

ありがとうございました。

+1

b配列を印刷すると先頭に0がありますか? – brummfondel

+0

はい:出力: '0 2 3 0' –

+2

これは仕様です。 0100 intが100で、これを文字列にすると0になることなく100になります。 – brummfondel

答えて

4

できません。 BigIntegerはその情報を保存しません。

public BigInteger(byte[] val) { 
    if (val.length == 0) 
     throw new NumberFormatException("Zero length BigInteger"); 

    if (val[0] < 0) { 
     mag = makePositive(val); 
     signum = -1; 
    } else { 
     mag = stripLeadingZeroBytes(val);  // (!) <-- watch this 
     signum = (mag.length == 0 ? 0 : 1); 
    } 
    if (mag.length >= MAX_MAG_LENGTH) { 
     checkRange(); 
    } 
} 
+0

しかし先行ゼロがあるかどうかを確認したい。どうすればいいですか? –

+3

次に、それを保持する構造体にデータを格納する必要があります。例えば。元のバイト配列を保持したり、先頭にゼロがあるかどうかを示すbooleanフラグを作成して、後で再利用することができます。 – Ivan

関連する問題