2016-04-01 49 views
4

Ben bu küçük kod var:BigInteger, bir bayt dizisini Java'daki sayıya nasıl dönüştürür?

public static void main(String[] args) { 

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

} 

Çıktı: 1826

Sorum sadece bayt dizisi {7,34}, neden operasyon nedir bu numara 1826 dönüştürülmüştür nasıl böyle oldu bu sonuç el ile nasıl dönüştürülür

cevap

11

1826 sayısı ikili olarak 11100100010'dur. Eğer 8 bit grupları halinde, aşağıdaki almak bölerseniz: ikili dönüştürülür ve 00000111 ve 00100010.After verecek mi numaraları 7 ve 34

+0

teşekkür ederiz! bu yardımcı oldu – Zizoo

0

7 ve 34 olan

00000111 00100010

1827'de ondalık olan 11100100010 olur.

0

Belirtildiği gibi, bu BigDecimalbig-endian order bayt temsilinden oluşturur.

biz mağaza sonucuna long kullandıysanız, manuel dönüşüm aşağıdaki gibi görünebilir:

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