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
我有这个小代码:
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