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

5

我有一个小代码:

public static void main(String[] args)  {

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

}

输出:1826

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

3个回答

11
数字1826在二进制下是11100100010。 如果你将其分成每8位一组,那么得到以下结果: 00000111 00100010 这就是数字7和34。

0
如上所述,这将从其以大端序表示的字节表示形式创建一个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;
}

例如:

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

0

将7和34转换为二进制,分别得到00000111和00100010。将它们拼接起来得到11100100010,这个数在十进制下是1826。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接