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

如何将十六进制字节数组转为字符串?及.java转该数组方法

问题解答

1. 将unsigned char数组转为可读内容

这个数组是Java类的字节码二进制数据,直接转普通字符串会出现乱码,正确处理方式是还原为.class文件再反编译:

  • 用C/C++或其他语言写简单程序,把数组中的字节写入后缀为.class的文件(比如ClassLoader.class)
  • 用JD-GUI、Procyon这类反编译工具打开该.class文件,就能看到可读的Java代码
  • 若只想查看字节码结构,可使用JDK自带的javap命令:生成.class文件后执行javap -c -v ClassLoader.class,即可查看字节码指令与结构细节

2. 0x00、0xCA这类十六进制值的含义

这些是Java字节码的标准组成单元:

  • 0xCA, 0xFE, 0xBA, 0xBE:Java字节码的魔数,所有合法.class文件的开头都是这四个字节,用来标识文件类型为Java类文件
  • 0x00, 0x00:紧随魔数的次版本号,值为0代表无次版本区分
  • 0x00, 0x34:主版本号,0x34对应十进制52,代表该类文件由JDK 8编译生成(版本对应关系:JDK8→52、JDK7→51、JDK6→50,以此类推)
  • 后续其他十六进制值对应类的具体结构数据,包括常量池、类信息、方法指令、属性定义等,每个字节或字节组合都对应Java字节码规范中的特定指令或数据结构

3. 修改Java代码后转回unsigned char数组

按以下步骤操作即可:

  1. 编译修改后的Java文件:用JDK自带的javac命令编译源文件,生成对应.class文件,比如执行javac YourModifiedClass.java
  2. 读取.class文件二进制内容:用Python、C/C++等语言读取.class文件的每一个字节,转换为十六进制格式(如0xXX)
  3. 生成目标数组:将所有十六进制字节按格式整理成unsigned char[]形式,每个字节用0xXX,分隔

举个Python示例(快速生成数组内容):

with open("YourModifiedClass.class", "rb") as f:
    bytes_data = f.read()
# 拼接成目标数组字符串
array_content = "unsigned char classLoaderClass[] = {\n    "
array_content += ", ".join([f"0x{b:02X}" for b in bytes_data])
array_content += " };"
# 打印或写入文件
print(array_content)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 13:15:07