當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。