当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java Byte Array转Long用法及代码示例


Java 字节数组是仅用于存储字节数据类型的数组。字节数组的每个元素的默认值为 0。

给定一个字节数组,将其转换为 long 值。

例子:

Byte Array: 1 2 3 4
Long Value: 16909060
Equivalent Hexadecimal String: 0x1020304

将字节数组转换为长整型的方法有很多种,下面列出了其中的一些方法。

方法:

  • 使用移位运算符
  • 使用BigInteger

方法一:使用移位运算符

将 byte 数组转换为 long 值时,由于 long 值占用 8 个字节,因此 bytes 数组的长度应等于或小于 8。否则会导致long-range溢出。

让我们考虑一个字节数组:

byte[] b = {(byte)0x1, (byte)0x2, (byte) 0x3, (byte) 0x4};
it's long value = 0x1020304

字节数据类型占用 8 位。

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

实现:以下是上述方法的实现 -

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

复杂度分析:

  • 时间复杂度:O(N),其中 N 是 byte_array 的长度
  • 空间复杂度:O(1)

方法2:使用BigInteger

尽管我们可以使用它在字节数组和原始值之间进行转换,但使用 BigInteger 对于这种目的来说有点繁重。让我们使用 BigInteger 类将字节数组转换为 long 值。 BigInteger 类有一个 longValue() 方法将字节数组转换为长整型值:

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


相关用法


注:本文由纯净天空筛选整理自unknwncdr878大神的英文原创作品 Java Program to Convert Byte Array to Long。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。