在Java中将十六进制字符串转换为ASCII

Jam*_*mes 32 java string hex ascii

我希望这不是一个愚蠢的问题,我已经查看了谷歌搜索结果的5个不同页面,但未能找到任何相关内容.

我需要做的是将包含所有十六进制字符的字符串转换为ASCII

String fileName = 

75546f7272656e745c436f6d706c657465645c6e667375635f6f73745f62795f6d757374616e675c50656e64756c756d2d392c303030204d696c65732e6d7033006d7033006d7033004472756d202620426173730050656e64756c756d00496e2053696c69636f00496e2053696c69636f2a3b2a0050656e64756c756d0050656e64756c756d496e2053696c69636f303038004472756d2026204261737350656e64756c756d496e2053696c69636f30303800392c303030204d696c6573203c4d757374616e673e50656e64756c756d496e2053696c69636f3030380050656e64756c756d50656e64756c756d496e2053696c69636f303038004d50330000
Run Code Online (Sandbox Code Playgroud)

我看到的每一种方式都让你觉得必须先将它放入数组中.有没有办法循环每一个并转换它们?

Mic*_*rry 95

只需使用for循环遍历字符串中的每个字符,将它们转换为字符,然后敲击字符串生成器末尾的字符:

String hex = "75546f7272656e745c436f6d706c657465645c6e667375635f6f73745f62795f6d757374616e675c50656e64756c756d2d392c303030204d696c65732e6d7033006d7033006d7033004472756d202620426173730050656e64756c756d00496e2053696c69636f00496e2053696c69636f2a3b2a0050656e64756c756d0050656e64756c756d496e2053696c69636f303038004472756d2026204261737350656e64756c756d496e2053696c69636f30303800392c303030204d696c6573203c4d757374616e673e50656e64756c756d496e2053696c69636f3030380050656e64756c756d50656e64756c756d496e2053696c69636f303038004d50330000";
StringBuilder output = new StringBuilder();
for (int i = 0; i < hex.length(); i+=2) {
    String str = hex.substring(i, i+2);
    output.append((char)Integer.parseInt(str, 16));
}
System.out.println(output);
Run Code Online (Sandbox Code Playgroud)

这给出了几行从以下开始:

uTorrent \已完成\nfsuc_ost_by_mustang\Pendulum-9,000 Miles.mp3

嗯...... :-)

  • 这个问题赢得了"年度最具自我认同问题"的奖项. (91认同)
  • 我知道这是一个老问题,但仅供参考Guava 14引入了[BaseEncoding](http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/io/BaseEncoding.html)类它将被用作`new String(BaseEncoding.base16().lowerCase().decode(hex),Charsets.US_ASCII)` - BaseEncoding实例可以缓存,因为它是不可变的 (5认同)
  • 哈哈好点,但幸运的是我这个文件来自曾经的一个案例,所以我很清楚,但我没想到哈哈!让我笑了:) (3认同)

Nik*_*rov 7

最简单的方法javax.xml.bind.DatatypeConverter:

    String hex = "75546f7272656e745c436f6d706c657465645c6e667375635f6f73745f62795f6d757374616e675c50656e64756c756d2d392c303030204d696c65732e6d7033006d7033006d7033004472756d202620426173730050656e64756c756d00496e2053696c69636f00496e2053696c69636f2a3b2a0050656e64756c756d0050656e64756c756d496e2053696c69636f303038004472756d2026204261737350656e64756c756d496e2053696c69636f30303800392c303030204d696c6573203c4d757374616e673e50656e64756c756d496e2053696c69636f3030380050656e64756c756d50656e64756c756d496e2053696c69636f303038004d50330000";
    byte[] s = DatatypeConverter.parseHexBinary(hex);
    System.out.println(new String(s));
Run Code Online (Sandbox Code Playgroud)

  • 该解决方案给出的结果与接受的答案相同。 (2认同)