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


Java Byte Array转Hex String用法及代码示例


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

十六进制字符串 - 十六进制字符串是数字 0-9 和字符 A-F 的组合,就像二进制字符串仅包含 0 和 1 一样。例如:“245FC”是一个十六进制字符串。

问题陈述 - 给定一个字节数组,任务是将字节数组转换为十六进制字符串。

例子:

Input : byteArray = { 9, 2, 14, 10 }
Output: 9 2 E A

Input : byteArray = { 7, 12, 13, 127 }
Output: 7 C D 7F

将字节数组转换为十六进制字符串涉及将字节数据类型数组更改为其字符串形式的十六进制值。有许多方法可以做到这一点;下面列出了其中一些。

方法:

  • 在Java中使用Format()方法
  • 使用按位移位运算符
  • 使用 Integer/Long 类中的预定义方法
  • 在 Java 中使用 BigInteger 的十六进制表示

方法 1 -在Java中使用Format()方法

可以使用Java String Format() 方法进行指定的转换。为了这,

  1. 迭代数组中的每个字节并计算其十六进制等效值。
  2. string.format() 用于打印十六进制值的位数并将该值存储在字符串中。
  3. %02X 用于打印两个十六进制值(十六进制 (X))之间加两个空格。

上述方法的实现如下:

Java


// Java Program to convert byte
// array to hex string
// Approach 1 -  Using Format() Method in Java
import java.io.*;
public class GFG {
    public static void convertByteToHexadecimal(byte[] byteArray)
    {
        String hex = "";
        // Iterating through each byte in the array
        for (byte i : byteArray) {
            hex += String.format("%02X", i);
        }
        System.out.print(hex);
    }
    public static void main(String[] args)
    {
        byte[] byteArray = { 7, 12, 13, 127 };
        convertByteToHexadecimal(byteArray);
    }
}
输出
070C0D7F

时间复杂度:O(n)
辅助空间:O(n)

方法 2 - 使用按位移位运算符

在前面的方法中,如果字节数组变大,则过程会变慢。字节操作用于将字节数组转换为十六进制值以提高效率。

这里使用“>>>” unsigned right shift operator。并且, toCharArray() 方法将给定的字符串转换为字符序列。

以下是上述方法的实现 -

Java


// Java program to convert byte
// array to hex string
// Approach 2 - Using Bitwise Shift Operators
import java.io.*;
public class GFG {
    public static void
        convertByteToHexadecimal(byte[] byteArray)
    {
        int len = byteArray.length;
        // storing the hexadecimal values
        char[] hexValues = "0123456789ABCDEF".toCharArray();
        char[] hexCharacter = new char[len * 2];
        // using  byte operation converting byte
        // array to hexadecimal value
        for (int i = 0; i < len; i++) {
            int v = byteArray[i] & 0xFF;
            hexCharacter[i * 2] = hexValues[v >>> 4];
            hexCharacter[i * 2 + 1] = hexValues[v & 0x0F];
        }
        System.out.println(hexCharacter);
    }
    public static void main(String[] args)
    {
        byte[] bytes = { 9, 2, 14, 127 };
        convertByteToHexadecimal(bytes);
    }
}
输出
09020E7F

方法 3 - 使用 Integer/Long 类中的预定义方法

Integer 类具有 toHexString() 方法,可将整数转换为其十六进制等效值。我们现在需要将字节数组转换为整数(对于 4 大小)或长整型(对于 8 大小)并使用此方法(因为此方法存在于两个类中,即具有相同名称的 Integer 和 Long )。为了将字节数组转换为整数或长整型,我们可以使用ByteBuffer类的wrap method

以下是上述方法的实现 -

Java


// Java program to convert byte
// array to hex string
// Approach 3 - Using the predefined method 
// in Integer/Long Class
import java.io.*;
// Importing packages to use wrap methods 
// of ByteBuffer Class
import java.nio.*;
public class GFG {
    public static String toHexadecimal(byte[] bytes)
    {
        StringBuilder result = new StringBuilder();
        for (byte i : bytes) {
            int decimal = (int)i & 0XFF;
            String hex = Integer.toHexString(decimal);
            if (hex.length() % 2 == 1) {
                hex = "0" + hex;
            }
            result.append(hex);
        }
        return result.toString();
    }
    public static void main(String[] args)
    {
        byte[] byteArray = { 9, 2, 14, 127 };
        System.out.println(toHexadecimal(byteArray));
    }
}
输出
09020e7f

方法 4 - 在 Java 中使用 BigInteger 的十六进制表示

由于速度慢,在 Java 中使用 BigInteger 类的十六进制表示是将字节数组转换为十六进制字符串的一种非常避免的方法。这里还可以观察到,由于我们处理数字而不是任意字节字符串,因此在某些情况下可能会省略前导零。

以下是上述方法的实现 -

Java


// Java program to convert byte
// array to hex string
// Approach 4 - Using Hexadecimal Representation
// of BigInteger in Java
import java.io.*;
// Importing the BigInteger class
import java.math.BigInteger;
public class GFG {
    public static void toHexString(byte[] byteArray)
    {
        // Printing the hexadecimal equivalent as string
        // representation from the BigInteger class.
        System.out.print(
            new BigInteger(1, byteArray).toString(16));
    }
    public static void main(String[] args)
    {
        byte[] byteArray = { 17, 2, 14, 127 };
        toHexString(byteArray);
    }
}
输出
11020e7f


相关用法


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