首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 將 Byte 陣列轉換為十六進制字串

     編輯:Java 綜合教學

Java Byte[] 轉 String (Hex) 完整範例

在 Java 開發中,將位元組陣列轉換為十六進制字串是常見需求,例如處理二進位資料、加密雜湊值輸出或網路封包分析。本文提供一個高效、無依賴的實作方式,並說明核心邏輯。

核心實作原理

每個 byte 佔 8 位元,可拆分為高 4 位與低 4 位,分別對應十六進制的一個字元 (0-9, a-f)。透過位元遮罩與位移運算,即可取得對應的十六進制字元。

完整程式碼範例

package com.goodfan;

public class ByteArrayToHexString {
    private static final char[] HEX_CHARS = {
        '0', '1', '2', '3', '4', '5', '6', '7',
        '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
    };

    /**
     * 將 byte 陣列轉為十六進制字串,每兩個字元之間以空格分隔
     * @param data 待轉換的位元組陣列
     * @return 格式化後的十六進制字串
     */
    public static String bytesToHexString(byte[] data) {
        if (data == null || data.length == 0) {
            return "";
        }
        StringBuilder sb = new StringBuilder(data.length * 3); // 預估容量:每 byte 2 字元 + 1 空格
        for (int i = 0; i < data.length; i++) {
            // 取高 4 位 (0xf0 = 11110000) 右移 4 位
            sb.append(HEX_CHARS[(data[i] & 0xf0) >>> 4]);
            // 取低 4 位 (0x0f = 00001111)
            sb.append(HEX_CHARS[data[i] & 0x0f]);
            // 非最後一個 byte 時加入空格分隔
            if (i < data.length - 1) {
                sb.append(' ');
            }
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        byte[] data = "hello kitty".getBytes();
        System.out.println("原始位元組陣列參考: " + data); // 印出物件參考位址
        String hexString = bytesToHexString(data);
        System.out.println("十六進制字串: " + hexString);
        // 輸出範例: 68 65 6c 6c 6f 20 6b 69 74 74 79
    }
}

關鍵點解析

  • 位元運算: data[i] & 0xf0 保留高半位元組,>> 4 將其移至低 4 位;data[i] & 0x0f 直接取得低半位元組。
  • 查表法: 使用 HEX_CHARS 陣列避免重複建立字串物件,效能優於 String.format 或 Integer.toHexString。
  • StringBuilder: 預先分配容量減少擴容開銷,提升大量資料處理效能。
  • 無符號右移 (>>>): 確保負數 byte 的高位元補 0,避免符號擴展影響結果。

替代方案 (JDK 17+)

若使用 JDK 17 或更新版本,可直接使用 java.util.HexFormat 簡化程式碼:

import java.util.HexFormat;

String hex = HexFormat.ofDelimiter(" ").formatHex(data);
// 或不加分隔符: HexFormat.of().formatHex(data)

此 API 內建執行緒安全、效能優異,為現代 Java 專案的首選。

常見應用場景

  • 加密演算法 (MD5, SHA) 的雜湊值顯示
  • 網路通訊協定的封包解析與除錯
  • 二進位檔案內容的文字化呈現
  • 資料庫 BLOB 欄位的十六進制匯出
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved