You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将十六进制格式字符串转换为Java byte数组?

没问题,这有几种Java里实现你需求的方案,步骤清晰,你可以按需选用:

实现方案

基础循环实现

这是最直观的写法,逻辑清晰容易理解,适合所有Java版本:

public class HexToByteArray {
    public static void main(String[] args) {
        String test = "0xF0 0x9F 0x87 0xB7 0xF0 0x9F 0x87 0xBA";
        // 第一步:按空格分割字符串为单个十六进制元素
        String[] hexStringArr = test.split(" ");
        byte[] test_arr = new byte[hexStringArr.length];
        
        for (int i = 0; i < hexStringArr.length; i++) {
            // 去掉每个元素的"0x"前缀,解析为十六进制整数后强转为byte
            int hexValue = Integer.parseInt(hexStringArr[i].substring(2), 16);
            test_arr[i] = (byte) hexValue;
        }
        
        // 可选:验证转换结果
        for (byte b : test_arr) {
            System.out.printf("0x%02X ", b);
        }
    }
}

关键步骤说明

  • 用split(" ")将原字符串按空格分割,得到单个十六进制字符串组成的数组
  • 通过substring(2)去除每个元素的0x前缀
  • 调用Integer.parseInt(..., 16)把十六进制字符串转为整数,再强制转换为byte(Java的byte是8位有符号类型,强转时会自动截断高24位,完全符合需求)

Java 8+ 流式实现

如果偏好简洁的函数式写法,可以用Stream API完成链式转换:

import java.util.Arrays;

public class HexToByteArrayStream {
    public static void main(String[] args) {
        String test = "0xF0 0x9F 0x87 0xB7 0xF0 0x9F 0x87 0xBA";
        
        byte[] test_arr = Arrays.stream(test.split(" "))
                .map(hexStr -> hexStr.substring(2)) // 移除0x前缀
                .mapToInt(hex -> Integer.parseInt(hex, 16)) // 转为十六进制整数
                .mapToByte(i -> (byte) i) // 强转为byte类型
                .toArray();
        
        // 可选:验证转换结果
        Arrays.stream(test_arr).forEach(b -> System.out.printf("0x%02X ", b));
    }
}

额外注意点

  • 若原字符串可能存在多余空格(比如开头、结尾或连续空格),可以把split(" ")替换为split("\\s+"),这样能匹配任意数量的空白字符
  • 如果输入字符串包含无效的十六进制格式(比如非0x开头、非法字符),Integer.parseInt会抛出NumberFormatException,可以根据需求添加异常处理逻辑

内容的提问来源于stack exchange,提问作者user4150916

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:49:58