2017-01-13 7 views
1

Я просматриваю текстовый файл захвата и отображает символы, полученные из шестнадцатеричного значения в ASCII. В Notepad ++ он также отображает символы от 00 to 1F, которые хорошо сопоставлены this webpage, и вы можете найти полную таблицу ASCII, включая расширенные значения с шестнадцатеричным и десятичным номерами here. Я понимаю, что они предназначены для управления персонажами, но есть ли способ показать их в java?Есть ли способ отображения символов ASCII в java?

Вот что представляет собой пример того, что показано в файле enter image description here

я могу получить все остальные символы ASCII, чтобы показать в моей Java программы, а не те, с символами, как STX NUL EOT SOH и т.д. , которые являются значениями от 0 to 31 в десятичном значении, и 00 to 1F в шестнадцатеричном формате.

Вот снимок ASCII таблицы из here enter image description here

Вот консольная фрагмент того, что показано в консоли enter image description here

Это код, я использую, чтобы напечатать это.

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

Любая помощь была бы принята с благодарностью!

+0

Что такое 'hex'? Он не объявлен в (неполном) коде, который вы предоставили. Кажется, вы преобразовываете свои байты в строку шестнадцатеричных цифр, а затем разбираете их обратно в интегральные значения; есть, насколько я могу судить, никаких оснований для этого процесса «туда и обратно». – VGR

ответ

1

Проблема заключается в том, что вы показываете значение как символ, поэтому оно будет автоматически интерпретироваться вашей консолью как символ с определенным способом отображения.

Если вы хотите отобразить то, что соответствует вид блокнота, вы, вероятно, придется использовать таблицу для не печатаемых символов, которые будут выглядеть следующим образом:

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

спасибо, я не знаю, почему я об этом не думал. Очень простое и хорошо объясненное решение. –

Смежные вопросы