BigInteger 如何将字节数组转换为 Java 中的数字?

How BigInteger convert a byte array to number in Java?

我有这个小代码:

public static void main(String[] args)  {

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

}

输出:1826

我的问题是刚刚发生了什么,字节数组{7,34}如何转换为这个数字1826,导致这个结果的操作是什么?比如如何手动转换

数字 1826 在二进制中是 11100100010。 如果将其分成 8 位一组,您将得到以下内容:

00000111 00100010

7和34是哪个数字

7 和 34 转换为二进制并给出 00000111 和 00100010.After 加入它变成 11100100010 是十进制的 1826.

如前所述,这会根据其在 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. 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