Java实现网络抓包原始字节转字符串及字节操作学习求助
十六进制字符串转字符串(字节转字符串)问题解决
你的代码核心问题
- 空数组直接赋值:
byteArray初始化为空数组,直接访问byteArray[byteArray.length]会触发数组越界异常,Java数组长度固定,需提前初始化或用动态集合类。 - 十六进制转字节逻辑错误:
charTemp是两位十六进制字符串,不能直接强转为int,需用Integer.parseInt(charTemp, 16)解析为十进制整数后再转byte。 - 循环逻辑错误:
i%2==0时处理空的charTemp,导致无效解析,应每两位字符处理一次。
正确实现代码
原生Java手动实现(兼容所有Java版本)
public class HexToStringConverter { public static void main(String[] args) { String hexString = "6549534f3030363030303036303038303038323230303030303030303030303030303430303030303030303030303030303034313830373432313730303030303130303103"; // 初始化字节数组:每两位十六进制对应一个字节 byte[] byteArray = new byte[hexString.length() / 2]; // 遍历十六进制字符串,每两位解析为一个字节 for (int i = 0; i < hexString.length(); i += 2) { String hexPair = hexString.substring(i, i + 2); // 将十六进制字符串转为十进制整数,再强转为byte byteArray[i / 2] = (byte) Integer.parseInt(hexPair, 16); } // 将字节数组转为字符串,指定编码(根据实际捕获的字节编码调整,此处用ASCII) String result = new String(byteArray, java.nio.charset.StandardCharsets.US_ASCII); System.out.println(result); } }
Java 17+简化实现(使用HexFormat)
import java.util.HexFormat; public class HexToStringConverter { public static void main(String[] args) { String hexString = "6549534f3030363030303036303038303038323230303030303030303030303030303430303030303030303030303030303034313830373432313730303030303130303103"; // 直接将十六进制字符串转为字节数组 byte[] byteArray = HexFormat.of().parseHex(hexString); // 字节数组转字符串 String result = new String(byteArray, java.nio.charset.StandardCharsets.US_ASCII); System.out.println(result); } }
字节操作学习参考资料
- 官方文档:
- 书籍:
- 《Java核心技术卷I:基础知识》:字符串、字节数组、字符编码的基础讲解
- 《Effective Java》:字节处理与编码的最佳实践
- 官方教程:
内容的提问来源于stack exchange,提问作者mc ser
相关产品推荐
相关产品推荐

