How to convert a byte array to its numeric value (Java)?
One could use the Buffer
s that are provided as part of the java.nio
package to perform the conversion.
Here, the source byte[]
array has a of length 8, which is the size that corresponds with a long
value.
First, the byte[]
array is wrapped in a ByteBuffer
, and then the ByteBuffer.getLong
method is called to obtain the long
value:
ByteBuffer bb = ByteBuffer.wrap(new byte[] {0, 0, 0, 0, 0, 0, 0, 4});
long l = bb.getLong();
System.out.println(l);
Result
4
I'd like to thank dfa for pointing out the ByteBuffer.getLong
method in the comments.
Although it may not be applicable in this situation, the beauty of the Buffer
s come with looking at an array with multiple values.
For example, if we had a 8 byte array, and we wanted to view it as two int
values, we could wrap the byte[]
array in an ByteBuffer
, which is viewed as a IntBuffer
and obtain the values by IntBuffer.get
:
ByteBuffer bb = ByteBuffer.wrap(new byte[] {0, 0, 0, 1, 0, 0, 0, 4});
IntBuffer ib = bb.asIntBuffer();
int i0 = ib.get(0);
int i1 = ib.get(1);
System.out.println(i0);
System.out.println(i1);
Result:
1
4
Assuming the first byte is the least significant byte:
long value = 0;
for (int i = 0; i < by.length; i++)
{
value += ((long) by[i] & 0xffL) << (8 * i);
}
Is the first byte the most significant, then it is a little bit different:
long value = 0;
for (int i = 0; i < by.length; i++)
{
value = (value << 8) + (by[i] & 0xff);
}
Replace long with BigInteger, if you have more than 8 bytes.
Thanks to Aaron Digulla for the correction of my errors.