C'è un modo per visualizzare i simboli ASCII in java?


Sto visualizzando un file di testo di acquisizione e mostra i simboli ottenuti dal valore esadecimale in ASCII. In Notepad++ mostra anche i simboli di 00 to 1Fsono ben mappati da questa pagina Webe puoi trovare la tabella ASCII completa inclusi i valori estesi con i loro numeri esadecimali e decimali qui. Capisco che sono pensati per essere caratteri di controllo, ma c'è un modo per mostrarli in java?

Ecco qual è un esempio di ciò che è mostrato nel file inserisci qui la descrizione dell'immagine

Posso ottenere tutti gli altri simboli ASCII da mostrare nel mio programma java, ma non quelli con i simboli come STX NUL EOT SOH ecc.. quali sono i valori da 0 to 31 in decimale e 00 to 1F in esadecimale.

Ecco un'istantanea della tabella ASCII da qui inserisci qui la descrizione dell'immagine

Ecco un frammento di console di ciò che viene mostrato nella console inserisci qui la descrizione dell'immagine

Questo è il codice che sto usando per stamparlo.

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));
                }
            }

Qualsiasi aiuto sarebbe molto apprezzato!!

Author: Salvador Hernandez, 2017-01-13

1 answers

Il problema qui è che stai visualizzando il valore come un carattere, quindi verrà automaticamente interpretato dalla tua console come un carattere con un modo specifico per essere visualizzato.

Se vuoi visualizzare qualcosa che corrisponda alla vista Blocco note, probabilmente dovresti usare una tabella per i caratteri non stampabili, che sarebbe simile a:

private static final String[] myTable = {"NUL", "SOH", ... };
public String getCharAsString(char value) {
    if(value <= (char) 0x1F) {
        return myTable[value];
    } else {
        return "" + value;
    }
}
 1
Author: Simon Guerout, 2017-01-13 18:06:38