2016-04-01 6 views
4

Ich habe diesen kleinen Code:Wie BigInteger konvertieren ein Byte-Array zu Nummer in Java?

public static void main(String[] args) { 

    byte[] bytesArray = {7,34}; 
    BigInteger bytesTointeger= new BigInteger(bytesArray); 
    System.out.println(bytesTointeger); 

} 

Ausgang: 1826

Meine Frage ist, was gerade passiert ist, wie ein Array von Bytes {7,34} in diese Zahl 1826 umgewandelt, was die Operation, die verursacht dieses Ergebnis? wie man es manuell konvertiert

Antwort

11

Die Zahl 1826 ist, in binär, 11100100010. Wenn Sie aufgespalten, dass Sie die folgende erhalten in Gruppen von 8 Bits:

00000111 00100010

die die Nummern 7 und 34

+0

Vielen Dank! das hat geholfen – Zizoo

0

7 und 34 wird binär umgewandelt und geben 00000111 und 00100010.After Join es wird 11100100010, die in Dezimal 1826 ist.

0

Wie gesagt, dies erstellt eine BigDecimal von seiner Byte-Darstellung in big-endian order.

Wenn wir long zu speichere das Ergebnis verwendet, manuelle Konvertierung wie folgt aussehen:

long bytesToLong(byte[] bs) { 
    long res = 0; 
    for (byte b : bs) { 
     res <<= 8; // make room for next byte 
     res |= b; // append next byte 
    } 
    return res; 
} 

E. g .:

byte[] bs;  
bs = new byte[]{ 7, 34 }; 
assertEquals(new BigInteger(bs).longValue(), bytesToLong(bs)); // 1826 
bs = new byte[]{ -1 }; 
assertEquals(new BigInteger(bs).longValue(), bytesToLong(bs)); // -1