有没有办法在java中显示ASCII码?
问题描述:
我正在查看捕获文本文件,它显示从ASCII中的十六进制值中获取的符号。在Notepad ++中,它还显示00 to 1F
中的符号,它们被this webpage很好地映射出来,并且您可以找到完整的ASCII表格,包括其十六进制和十进制数字的扩展值here。我明白,他们是为了控制角色,但有什么方法可以在java中显示他们?有没有办法在java中显示ASCII码?
我能得到所有其他ASCII符号在我的java程序显示,而不是那些与像STX NUL EOT SOH
等符号。这些值是十进制的0 to 31
和十六进制的00 to 1F
。
这是ASCII表从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));
}
}
任何帮助将不胜感激!!
答
这里的问题是,您将显示值作为字符,所以它会被控制台自动解释为具有特定显示方式的字符。
如果你想显示的记事本视图相匹配的东西,你可能不得不使用非打印字符表,这看起来像:
private static final String[] myTable = {"NUL", "SOH", ... };
public String getCharAsString(char value) {
if(value <= (char) 0x1F) {
return myTable[value];
} else {
return "" + value;
}
}
+1
谢谢,我不知道为什么我没有想到这一点。非常简单并且很好的解释。 –
什么是'hex'?它没有在您提供的(不完整)代码中声明。看起来你正在将你的字节转换为一个十六进制数字的字符串,然后将它们解析回整型值中;据我所知,这个往返过程没有任何理由。 – VGR