十六進製字符串 - 十六進製字符串是數字 0-9 和字符 A-F 的組合,就像二進製字符串僅包含 0 和 1 一樣。例如:“245FC”是一個十六進製字符串。
字節數組 - Java 字節數組是僅用於存儲字節數據類型的數組。字節數組的每個元素的默認值為 0。
給定一個字節數組,任務是將十六進製字符串轉換為字節數組。
例子:
Input - Hex String : "2f4a33" Output - Byte Array : 47 74 51 Input - Hex String : "3b4a11" Output - Byte Array : 59 74 17
將十六進製字符串轉換為字節數組的方法有很多種,下麵列出了其中的一些方法。
方法:
- 在Java中使用Integer類的parseInt()方法
- 在 Java 中使用 BigInteger 的字節數組表示
- 使用按位移位運算符
方法 1 - 使用 Java 中 Integer 類的 parseInt() 方法
Java 中的 integer.parseInt() 方法將給定字符串轉換為整數。根據給定的問題陳述,由於我們必須將十六進製字符串轉換為字節數組,因此我們首先將十六進製字符串的字符成對轉換為特定的字節格式,並將該數字插入字節數組中。在此,字節數組的初始化大小為十六進製字符串長度的一半。
以下是上述方法的實現 -
Java
// Java Program to convert hex
// string to byte array
// Approach 1 - Using parseInt() method of
// Integer class in Java
import java.io.*;
public class GFG {
public static void main(String[] args)
{
// Initializing the hex string and byte array
String s = "2f4a33";
byte[] ans = new byte[s.length() / 2];
System.out.println("Hex String : "+s);
for (int i = 0; i < ans.length; i++) {
int index = i * 2;
// Using parseInt() method of Integer class
int val = Integer.parseInt(s.substring(index, index + 2), 16);
ans[i] = (byte)val;
}
// Printing the required Byte Array
System.out.print("Byte Array : ");
for (int i = 0; i < ans.length; i++) {
System.out.print(ans[i] + " ");
}
}
}
Hex String : 2f4a33 Byte Array : 47 74 51
方法 2 - 在 Java 中使用 BigInteger 的字節數組表示
在這種方法中,我們將使用BigInteger類的toByteArray() 方法。使用parseInt()方法將十六進製數轉換為整數值後,我們需要將整數轉換為字節數組。這裏是 BigInteger 類的 toByteArray() 方法的作用,它將整數值轉換為字節數組並返回它。
以下是上述方法的實現 -
Java
// Java Program to convert hex
// string to byte array
// Approach 1 - Using Byte Array Representation
// of BigInteger in Java
import java.io.*;
// importing BigInteger class
import java.math.BigInteger;
class GFG {
public static void main(String[] args)
{
String s = "3b4a11";
// converting string to integer value
int val = Integer.parseInt(s, 16);
System.out.println("Hexadecimal String : " + s);
// converting integer value to Byte Array
BigInteger big = BigInteger.valueOf(val);
byte[] ans = (big.toByteArray());
// printing the byte array
System.out.print("Byte Array : ");
for (int i = 0; i < ans.length; i++)
System.out.print(ans[i] + " ");
}
}
Hexadecimal String : 3b4a11 Byte Array : 59 74 17
方法 3 - 使用按位移位運算符
將十六進製字符串轉換為字節數組的另一種方法是使用 Java 的二進製移位運算符。這裏使用“<<”按位左移運算符。為了獲取字符的十六進製數值,使用了Java中的Character.digit() 方法。
以下是上述方法的實現 -
Java
// Java program to convert hex
// string to byte array
// Approach 3 - Using Bitwise Shift Operators
import java.io.*;
class GFG {
public static void main (String[] args) {
// initializing hex string and byte array
String s ="1f3d44";
System.out.println("Hex String : " + s);
int len = s.length();
byte[] ans = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
// using left shift operator on every character
ans[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
}
// printing the required result
System.out.print("Byte Array : ");
for(int i=0;i<ans.length;i++){
System.out.print(ans[i]+" ");
}
}
}
Hex String : 1f3d44 Byte Array : 31 61 68
相關用法
- Java Hexadecimal轉Binary用法及代碼示例
- Java HashMap clear()用法及代碼示例
- Java HashMap clone()用法及代碼示例
- Java HashMap isEmpty()用法及代碼示例
- Java HashMap size()用法及代碼示例
- Java HashMap put()用法及代碼示例
- Java HashMap putAll()用法及代碼示例
- Java HashMap putIfAbsent()用法及代碼示例
- Java HashMap remove()用法及代碼示例
- Java HashMap containsKey()用法及代碼示例
- Java HashMap containsValue()用法及代碼示例
- Java HashMap replace()用法及代碼示例
- Java HashMap replaceAll()用法及代碼示例
- Java HashMap get()用法及代碼示例
- Java HashMap getOrDefault()用法及代碼示例
- Java HashMap forEach()用法及代碼示例
- Java HashMap entrySet()用法及代碼示例
- Java HashMap keySet()用法及代碼示例
- Java HashMap values()用法及代碼示例
- Java HashMap merge()用法及代碼示例
- Java HashMap compute()用法及代碼示例
- Java HashMap computeIfAbsent()用法及代碼示例
- Java HashMap computeIfPresent()用法及代碼示例
- Java Hashtable entrySet()用法及代碼示例
- Java Hashtable equals()用法及代碼示例
注:本文由純淨天空篩選整理自manastole01大神的英文原創作品 Java Program to Convert Hex String to Byte Array。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。