2016-04-01 13 views
4

私はこの小さなコードを持っている:BigIntegerはJavaでバイト配列を数値に変換する方法を教えてください。

public static void main(String[] args) { 

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

} 

出力:1826

私の質問は、ちょうどバイトの配列{7,34}は、原因となった操作するものです。この数1826に変換する方法何が起こったかでありますこの結果は?手動で変換するような方法

答えて

11

番号1826は、バイナリで11100100010です。 あなたは、8ビットのグループでは、次のことを得るに分割した場合:バイナリに変換し、00000111と00100010.Afterを与えている番号7および34

+0

ありがとうございました!それは助けになった – Zizoo

0

7と34です

00000111 00100010

これは10進数の1826である11100100010になります。

0

これは、big-endian orderのバイト表現からBigDecimalを作成します。

我々は店の結果にlongを使用した場合は、手動変換は、以下のようになります。

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.グラム:

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 
関連する問題