A Java Byte Array is an array used to store byte data types only. The default value of each element of the byte array is 0.
Given an array of bytes, convert it to a long value.
Example:
Byte Array: 1 2 3 4 Long Value: 16909060 Equivalent Hexadecimal String: 0x1020304
There are numerous approaches for converting a Byte Array to Long, and a few of them are listed below.
Approaches:
- Using shifting operators
- Using BigInteger
Method 1: Using Shifting Operators
When converting a byte array to a long value, the length of the bytes array should be equal to or less than eight since a long value occupies 8 bytes. Otherwise, it will lead to a long-range overflow.
Let’s consider a byte array:
byte[] b = {(byte)0x1, (byte)0x2, (byte) 0x3, (byte) 0x4}; it's long value = 0x1020304
A byte data type takes 8 bits.
initially let val = 0 val = (0<<8) + (11111111 & 1) = 1 val = (1<<8) + (11111111 & 010) = 100000010 val = (100000010 << 8) + (11111111 & 011) = 10000001000000011 val = (10000001000000011 << 8) + (11111111 & 011) = 1000000100000001100000100 = 0x1020304
Implementation: Following is the implementation of the foregoing approach –
Java
// Java Program for Converting byte // array to a long value class GFG { // A utility function that returns // long value from a byte array static long convertToLong( byte [] bytes) { long value = 0l; // Iterating through for loop for ( byte b : bytes) { // Shifting previous value 8 bits to right and // add it with next value value = (value << 8 ) + (b & 255 ); } return value; } // Driver code public static void main(String[] args) { byte [] byte_array = new byte [] { ( byte ) 0x1 , ( byte ) 0x2 , ( byte ) 0x3 , ( byte ) 0x4 }; // Printing the required Byte Array System.out.print( "Byte Array : " ); for ( int i = 0 ; i < byte_array.length; i++) { System.out.print(byte_array[i] + " " ); } System.out.println(); // Finding long value through the approach discussed long ans = convertToLong(byte_array); // Now compare OUTPUT_VALUE and value and you // will find both are equal System.out.println( "Long value in hex string: " + Long.toHexString(ans)); } } |
Byte Array : 1 2 3 4 Long value in hex string: 1020304
Complexity Analysis:
- Time Complexity: O(N), where N is the length of byte_array
- Space Complexity: O(1)
Method 2: Using BigInteger
Even though we can use it to convert between a byte array and a primitive value, using BigInteger is a bit heavy for this kind of purpose. Let’s use the BigInteger class to convert a byte array to a long value. The BigInteger class has a longValue() method to convert a byte array to a long value:
long value = new BigInteger(bytes).longValue();
Java
// Java Program to convert byte[] // to long Using BigInteger import java.math.BigInteger; class ByteToLong { // returns long value from byte[] static long convertToLong( byte [] bytes) { // Using longValue() from BigInteger return new BigInteger(bytes).longValue(); } // Driver code public static void main(String[] args) { byte [] byte_array = new byte [] { ( byte ) 0x1 , ( byte ) 0x2 , ( byte ) 0x3 , ( byte ) 0x4 }; // Printing the required Byte Array System.out.print( "Byte Array : " ); for ( int i = 0 ; i < byte_array.length; i++) { System.out.print(byte_array[i] + " " ); } System.out.println(); // Finding long value through the approach discussed long ans = convertToLong(byte_array); // Now you can compare OUTPUT_VALUE and value and you // will find both are equal System.out.println( "Long value in hex string: " + Long.toHexString(ans)); } } |
Byte Array : 1 2 3 4 Long value in hex string: 1020304