Android Java环境下逗号分隔十六进制字节字符串转byte数组方案问询
简洁实现方案
你完全可以用Integer.parseInt()直接处理十六进制串,不需要引入BigInteger做冗余转换,代码可以简化很多:
String data = "0x01,0x02,0x03,0x04,0xA1,"; String[] splitData = data.split(","); List<Byte> byteList = new ArrayList<>(); for (String s : splitData) { // 过滤分割后产生的空串(适配末尾带逗号的情况) if (s.trim().isEmpty()) continue; // 去掉0x前缀后转16进制整数,再强转为byte byte b = (byte) Integer.parseInt(s.substring(2), 16); byteList.add(b); } // 转换为最终byte数组 byte[] byteArray = new byte[byteList.size()]; for (int i = 0; i < byteList.size(); i++) { byteArray[i] = byteList.get(i); }
如果你的Android项目已经开启Java 8+支持,还可以用流式写法进一步简化:
import java.util.Arrays; import java.io.ByteArrayOutputStream; String data = "0x01,0x02,0x03,0x04,0xA1,"; byte[] byteArray = Arrays.stream(data.split(",")) .filter(s -> !s.trim().isEmpty()) .map(s -> s.substring(2)) .mapToInt(hex -> Integer.parseInt(hex, 16)) .collect(ByteArrayOutputStream::new, ByteArrayOutputStream::write, (os1, os2) -> os1.write(os2.toByteArray())) .toByteArray();
说明
- 强转
byte时会自动适配Java的有符号字节规则,比如0xA1转换后会得到对应的负数字节值,符合预期 - 如果输入能保证没有多余空元素,可以去掉空串过滤逻辑
- 如需做合法性校验,加
try-catch捕获NumberFormatException即可处理非法十六进制串的情况
内容的提问来源于stack exchange,提问作者JoeP
相关产品推荐
相关产品推荐

