Java Program to Convert Byte Array to Long
Last Updated :
11 Feb, 2022
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
class GFG {
static long convertToLong( byte [] bytes)
{
long value = 0l;
for ( byte b : bytes) {
value = (value << 8 ) + (b & 255 );
}
return value;
}
public static void main(String[] args)
{
byte [] byte_array
= new byte [] { ( byte ) 0x1 , ( byte ) 0x2 , ( byte ) 0x3 ,
( byte ) 0x4 };
System.out.print( "Byte Array : " );
for ( int i = 0 ; i < byte_array.length; i++) {
System.out.print(byte_array[i] + " " );
}
System.out.println();
long ans = convertToLong(byte_array);
System.out.println( "Long value in hex string: "
+ Long.toHexString(ans));
}
}
|
Output
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
import java.math.BigInteger;
class ByteToLong {
static long convertToLong( byte [] bytes)
{
return new BigInteger(bytes).longValue();
}
public static void main(String[] args)
{
byte [] byte_array
= new byte [] { ( byte ) 0x1 , ( byte ) 0x2 , ( byte ) 0x3 ,
( byte ) 0x4 };
System.out.print( "Byte Array : " );
for ( int i = 0 ; i < byte_array.length; i++) {
System.out.print(byte_array[i] + " " );
}
System.out.println();
long ans = convertToLong(byte_array);
System.out.println( "Long value in hex string: "
+ Long.toHexString(ans));
}
}
|
Output
Byte Array : 1 2 3 4
Long value in hex string: 1020304
Share your thoughts in the comments
Please Login to comment...