2017-07-12 54 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