2017-01-13 2 views
1

Ich sehe eine Capture-Textdatei und es zeigt die Symbole, die aus dem hexadezimalen Wert in ASCII erhalten werden. In Notepad ++ werden auch die Symbole aus 00 to 1F angezeigt, die schön von this webpage zugeordnet sind. Sie finden die vollständige ASCII-Tabelle einschließlich der erweiterten Werte mit ihren hexadezimalen und dezimalen Zahlen here. Ich verstehe, dass sie Kontrollfiguren sein sollen, aber gibt es eine Möglichkeit, sie in Java zu zeigen?Gibt es eine Möglichkeit, ASCII-Symbole in Java anzuzeigen?

Hier ist, was ist ein Beispiel, was in der Datei angezeigt wird enter image description here

Ich kann alle bekommen die anderen ASCII-Zeichen in meinem Java-Programm zu zeigen, aber nicht die, die mit den Symbolen wie STX NUL EOT SOH usw. Dies sind die Werte von 0 to 31 in Dezimal und 00 to 1F in Hex.

Hier ist eine Momentaufnahme der ASCII-Tabelle aus here enter image description here

Hier ist eine Konsole Schnipsel von dem, was in der Konsole, dass auszudrucken Dies ist der Code, ich verwende enter image description here

gezeigt.

FileInputStream fis = new FileInputStream(filePath); 
int length = (int) new File(filePath).length(); 
byte[] buffer = new byte[length]; 
fis.read(buffer, 0, length); 

for (int i = 1; i < hex.length(); i++){ 
       if(i %2 == 0){ 
        String test = String.valueOf(hex.charAt(i-2))+ String.valueOf(hex.charAt(i-1)); 

        System.out.println("Hex: "+test+" hexadecimal: "+Integer.parseInt(test, 16)+" char: "+(char) Integer.parseInt(test, 16)); 
       } 
      } 

Jede Hilfe würde sehr geschätzt werden !!

+0

Was 'hex' ist? Es ist nicht in dem (unvollständigen) Code angegeben, den Sie angegeben haben. Es sieht so aus, als ob Sie Ihre Bytes in einen String mit hexadezimalen Ziffern konvertieren und diese dann wieder in ganzzahlige Werte zerlegen. Es gibt, soweit ich das beurteilen kann, keinen Grund für diesen Rundreiseprozess. – VGR

Antwort

1

Das Problem hier ist, dass Sie den Wert als ein Zeichen anzeigen, so wird es automatisch von Ihrer Konsole als ein Zeichen mit einer bestimmten Art und Weise interpretiert werden angezeigt.

Wenn Sie etwas anzuzeigen, die das Editor-Ansicht übereinstimmt, dann würden Sie wahrscheinlich eine Tabelle für nicht druckbare Zeichen verwenden müssen, die aussehen würde:

private static final String[] myTable = {"NUL", "SOH", ... }; 
public String getCharAsString(char value) { 
    if(value <= (char) 0x1F) { 
     return myTable[value]; 
    } else { 
     return "" + value; 
    } 
} 
+1

danke, ich weiß nicht, warum ich nicht daran gedacht habe. Sehr einfache und gut erklärte Lösung. –

Verwandte Themen