2016-04-01 127 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

即数字7和34

+0

谢谢!这是有帮助的 – Zizoo

0

7和34转换成二进制,给00000111和00100010.After加入它变成11100100010这是在十进制1826.

0

如上所述,这将创建一个BigDecimal从它的字节表示big-endian order

如果我们使用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 
相关问题