2017-07-12 53 views
0

我有一个需要转换为ASCII并打印的十六进制字符串。在调试时,我可以看到正确的值,但是当我尝试打印ASCII时,它会忽略它并转到下一个。有没有办法以点(。)替换所有不可打印的字符。这里是我的代码片段:在Java中将不可打印的字符打印为完整版

import javax.xml.bind.DatatypeConverter; 
byte[] out = toByteArray("0000005401F40000D9E3C60500000000002000000000000000D7C8F10000000000000000000000004040404040404040D9E3C600E9C7C9F0F0F0F1F1E5D9C1D1C1D54040F0F0F14BF0F0F14BF0F0F14BF0F0F100"); // Input Hex String 
System.out.println("ASCII: " + out); // Prints [[email protected] 
String hex = toHexString(out); 
System.out.println("Hex: " + hex); // Prints the hex - 00000054 exactly 

public static String toHexString(byte[] array) { 
    return DatatypeConverter.printHexBinary(array); 
} 

public static byte[] toByteArray(String s) { 
    return DatatypeConverter.parseHexBinary(s); 
} 
+1

的System.out.println( “ASCII” +阵列。的toString(出)); – Frank

回答

1
import java.util.Arrays; 

import javax.xml.bind.DatatypeConverter; 
public class Main { 

    public Main() { 
     // TODO Auto-generated constructor stub 
    } 

    public static void main(String[] args) { 

     byte[] out = toByteArray("0000005401F40000D9E3C60500000000002000000000000000D7C8F10000000000000000000000004040404040404040D9E3C600E9C7C9F0F0F0F1F1E5D9C1D1C1D54040F0F0F14BF0F0F14BF0F0F14BF0F0F100"); // Input Hex String 
     System.out.println("ASCII: " + Arrays.toString(out)); 
     String hex = toHexString(out); 
     System.out.println("Hex: " + hex); // Prints the hex - 00000054 exactly 


    } 
    public static String toHexString(byte[] array) { 
     return DatatypeConverter.printHexBinary(array); 
    } 

    public static byte[] toByteArray(String s) { 
     return DatatypeConverter.parseHexBinary(s); 
    } 

} 

输出更换的

enter image description here

例子:

//non-ASCII 
String yourstring = Arrays.toString(out).replaceAll("[^\\x00-\\x7F]", "."); 


    //non-printable characters 
String yourstring = Arrays.toString(out).replaceAll("\\p{C}", "."); 
+0

这解决了我的问题,但主要问题就像我需要用“点”替换不可打印的字符。 – JackSlayer94

+0

要做到这一点,你需要一个正则表达式,在** replaceall **字符串方法 – Frank

+0

Answer edited .. – Frank