如何将十六进制格式字符串转换为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
相关产品推荐
相关产品推荐

