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:
14
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.
Simply, you could use or refer to guava lib provided by google, which offers utiliy methods for conversion between long and byte array. My client code:
long content = 212000607777l; byte[] numberByte = Longs.toByteArray(content); logger.info(Longs.fromByteArray(numberByte));