我有这个小代码:
public static void main(String[] args) {
byte[] bytesArray = {7,34};
BigInteger bytesTointeger= new BigInteger(bytesArray);
System.out.println(bytesTointeger);
}
输出:1826
我的问题是刚刚发生了如何将字节数组{7,34}转换为此数字1826,导致此结果的操作是什么?比如如何手动转换它
答案 0 :(得分:11)
数字1826是二进制的,11100100010
。
如果将其拆分为8位组,则会得到以下结果:
00000111 00100010
数字7和34
答案 1 :(得分:0)
7和34转换为二进制,并给出00000111和00100010.加入后,它变为11100100010,即1826年的十进制。
答案 2 :(得分: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;
}
电子。 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