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

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);
    }
}

字节操作学习参考资料

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:58:23