有没有办法在java中显示ASCII码?

问题描述:

我正在查看捕获文本文件,它显示从ASCII中的十六进制值中获取的符号。在Notepad ++中,它还显示00 to 1F中的符号,它们被this webpage很好地映射出来,并且您可以找到完整的ASCII表格,包括其十六进制和十进制数字的扩展值here。我明白,他们是为了控制角色,但有什么方法可以在java中显示他们?有没有办法在java中显示ASCII码?

这里是什么是什么是文件中所示的样品 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

这里的问题是,您将显示值作为字符,所以它会被控制台自动解释为具有特定显示方式的字符。

如果你想显示的记事本视图相匹配的东西,你可能不得不使用非打印字符表,这看起来像:

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

谢谢,我不知道为什么我没有想到这一点。非常简单并且很好的解释。 –