Konvertieren Sie einen Hex-String in ASCII in Java

Ich hoffe, das ist keine allzu dumme Frage, ich habe auf 5 verschiedenen Seiten von Google-Ergebnissen geschaut, konnte aber nichts dazu finden.

Was ich tun muss, ist eine Zeichenfolge, die alle Hex-Zeichen enthält, beispielsweise in ASCII zu konvertieren

String fileName = 75546f7272656e745c436f6d706c657465645c6e667375635f6f73745f62795f6d757374616e675c50656e64756c756d2d392c303030204d696c65732e6d7033006d7033006d7033004472756d202620426173730050656e64756c756d00496e2053696c69636f00496e2053696c69636f2a3b2a0050656e64756c756d0050656e64756c756d496e2053696c69636f303038004472756d2026204261737350656e64756c756d496e2053696c69636f30303800392c303030204d696c6573203c4d757374616e673e50656e64756c756d496e2053696c69636f3030380050656e64756c756d50656e64756c756d496e2053696c69636f303038004d50330000 

Jeder Weg, den ich gesehen habe, lässt es so erscheinen, als müsste man es zuerst in ein Array legen. Gibt es keine Möglichkeit, die beiden zu durchlaufen und zu konvertieren?

Verwenden Sie einfach eine for-Schleife, um alle paar Zeichen in der Zeichenfolge zu durchlaufen, konvertieren Sie sie in ein Zeichen und schlagen Sie dann das Zeichen am Ende eines Zeichenfolgen-Builders:

 public static void main(String[] args) { 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); } 

Dies gibt ein paar Zeilen beginnend mit dem folgenden:

uTorrent \ Abgeschlossen \ nfsuc_ost_by_mustang \ Pendulum-9.000 Meilen.mp3

Hmmm... 🙂

Der einfachste Weg, dies mit javax.xml.bind.DatatypeConverter zu tun:

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

Auschecken Konvertieren einer Zeichenfolgendarstellung eines Hexadezimalspeichers in ein Bytearray mithilfe von Java?

Unabhängig von der Codierung usw. können Sie new String (hexStringToByteArray("75546..."));

So wie ich es verstehe, müssen Sie aufeinanderfolgende Hexadezimalziffern herausziehen, dann die 2-stellige Hexadezimalzahl decodieren und das entsprechende Zeichen nehmen:

 String s = "..."; StringBuilder sb = new StringBuilder(s.length() / 2); for (int i = 0; i < s.length(); i+=2) { String hex = "" + s.charAt(i) + s.charAt(i+1); int ival = Integer.parseInt(hex, 16); sb.append((char) ival); } String string = sb.toString(); 
 String hexToAscii(String s) { int n = s.length(); StringBuilder sb = new StringBuilder(n / 2); for (int i = 0; i < n; i += 2) { char a = s.charAt(i); char b = s.charAt(i + 1); sb.append((char) ((hexToInt(a) << 4) | hexToInt(b))); } return sb.toString(); } private static int hexToInt(char ch) { if ('a' <= ch && ch <= 'f') { return ch - 'a' + 10; } if ('A' <= ch && ch <= 'F') { return ch - 'A' + 10; } if ('0' <= ch && ch <= '9') { return ch - '0'; } throw new IllegalArgumentException(String.valueOf(ch)); } 
 //%%%%%%%%%%%%%%%%%%%%%% HEX to ASCII %%%%%%%%%%%%%%%%%%%%%% public String convertHexToString(String hex){ String ascii=""; String str; // Convert hex string to "even" length int rmd,length; length=hex.length(); rmd =length % 2; if(rmd==1) hex = "0"+hex; // split into two characters for( int i=0; i126 && dec<161) str="n/a"; return str; } 

In diesem Fall habe ich ein hexadezimales Datenformat in ein int-Array und möchte es in String konvertieren.

 int[] encodeHex = new int[] { 0x48, 0x65, 0x6c, 0x6c, 0x6f }; // Hello encode for (int i = 0; i < encodeHex.length; i++) { System.out.print((char) (encodeHex[i])); }