2016-11-19 97 views
-2

我有一个Java程序创建一个字节数组0x00 0x02 0x03 0x00。我将它转换为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作为整数是100,并使这一个字符串将是100没有领先0. – 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

然后,您应该将数据存储在保留该数据的结构中。例如。您可以保留原始字节数组或创建一个布尔标志,告诉您是否有前导零,并在稍后重用。 – Ivan