【问题标题】:Is there a way to display ASCII symbols in java?有没有办法在java中显示ASCII符号?
【发布时间】:2017-01-13 17:55:58
【问题描述】:

我正在查看一个捕获文本文件,它显示了从 ASCII 中的十六进制值获得的符号。在 Notepad++ 中,它还显示了来自 00 to 1F 的符号,它们被 this webpage 很好地映射出来,您可以找到完整的 ASCII 表,包括带有十六进制和十进制数字 here 的扩展值。我知道它们是控制字符,但有什么方法可以在 java 中显示它们?

这是文件中显示的示例

我可以让所有其他 ASCII 符号显示在我的 java 程序中,但不能显示带有 STX NUL EOT SOH 等符号的符号,这些符号来自 0 to 31 的十进制值和 00 to 1F 的十六进制值.

这是来自here 的 ASCII 表的快照

这是控制台中显示的控制台 sn-p

这是我用来打印的代码。

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

任何帮助将不胜感激!

【问题讨论】:

  • 什么是hex?它没有在您提供的(不完整的)代码中声明。看来您正在将字节转换为十六进制数字字符串,然后将它们解析回整数值;据我所知,这种往返过程没有任何理由。

标签: java byte ascii symbols pcap


【解决方案1】:

这里的问题是您将值显示为字符,因此控制台会自动将其解释为具有特定显示方式的字符。

如果您想显示与记事本视图匹配的内容,您可能必须使用一个表格来显示不可打印的字符,如下所示:

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

【讨论】:

  • 谢谢,我不知道为什么我没有想到这一点。非常简单且解释清楚的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
  • 2019-04-12
相关资源
最近更新 更多