Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีแปลง String เป็น Hexadecimal และกลับกันใน Java

String → Hexadecimal

ใช้ Integer.toHexString(int) แปลงแต่ละ character (char → int → hex)

ตัวอย่าง


import java.util.Scanner;

public class StringToHex {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter a String: ");
        String str = sc.next();
        
        StringBuilder sb = new StringBuilder();
        for (char ch : str.toCharArray()) {
            sb.append(Integer.toHexString(ch));
        }
        
        String hex = sb.toString();
        System.out.println("Hex: " + hex);
    }
}

ผลลัพธ์


Enter a String: Tutorialspoint
Hex: 5475746f7269616c73706f696e74

Hexadecimal → String

อ่านทีละ 2 ตัวอักษร hex → parseInt(base 16) → cast เป็น char

ตัวอย่าง


import java.util.Scanner;

public class HexToString {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter Hex: ");
        String hex = sc.next();
        
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < hex.length(); i += 2) {
            String hexPair = hex.substring(i, i + 2);
            int charCode = Integer.parseInt(hexPair, 16);
            sb.append((char) charCode);
        }
        
        String result = sb.toString();
        System.out.println("String: " + result);
    }
}

ผลลัพธ์


Enter Hex: 5475746f7269616c73706f696e74
String: Tutorialspoint

วิธีทันสมัย: ใช้ Java 17+ HexFormat (แนะนำ)

Java 17 เพิ่ม java.util.HexFormat สำหรับแปลง byte[] ↔ hex


import java.util.HexFormat;

public class ModernHexConversion {
    public static void main(String[] args) {
        String original = "Tutorialspoint";
        
        // String → Hex
        byte[] bytes = original.getBytes(StandardCharsets.UTF_8);
        String hex = HexFormat.of().formatHex(bytes);
        System.out.println("Hex: " + hex); // 5475746f7269616c73706f696e74
        
        // Hex → String
        byte[] decoded = HexFormat.of().parseHex(hex);
        String decodedStr = new String(decoded, StandardCharsets.UTF_8);
        System.out.println("Decoded: " + decodedStr); // Tutorialspoint
    }
}

การเปรียบเทียบ

วิธีJava Versionรองรับ Unicodeประสิทธิภาพคะแนน
Integer.toHexString(char)1.0✗ (BMP only)ปานกลาง⭐⭐
HexFormat (Java 17+)17✓ (UTF-8 bytes)ดีที่สุด⭐⭐⭐⭐⭐
Apache Commons Codec HexExternal✓ดี⭐⭐⭐⭐

ข้อควรระวัง

  • วิธีเก่า (toHexString(char)) ใช้ UTF-16 code unit - ไม่รองรับ supplementary characters (emoji, ภาษาบางภาษา)
  • HexFormat ใช้ UTF-8 bytes - รองรับทุก Unicode character ได้ถูกต้อง
  • Hex string ควรเป็น lowercase ตาม convention (HexFormat.of().withUpperCase() ถ้าต้องการ uppercase)
  • ความยาว hex string = 2 × byte length

สรุป

  • Java 17+: ใช้ HexFormat.of().formatHex(bytes) และ HexFormat.of().parseHex(hex)
  • Java < 17: ใช้ Integer.toHexString() loop หรือ library (Apache Commons Codec, Guava)
  • ระบุ charset ชัดเจน (UTF-8) เพื่อความเข้ากันได้