📌  相关文章
📜  将字节数组转换为十六进制字符串的Java程序

📅  最后修改于: 2022-05-13 01:55:41.868000             🧑  作者: Mango

将字节数组转换为十六进制字符串的Java程序

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

十六进制字符串 –十六进制字符串是数字 0-9字符AF的组合,就像二进制字符串仅包含 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. 字符串.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);
    }
}


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);
    }
}


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));
    }
}


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);
    }
}


输出
070C0D7F

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

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

这里使用“>>>”无符号右移运算符。并且, 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 方法。

以下是上述方法的实施——

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