如何在java中打印字符串的扩展值ascii?

时间:2012-05-13 08:19:02

标签: java character-encoding

我有要求我必须打印一个字符串的ascii值,当我尝试打印它的打印意外值时,我的程序如下所示

  int s=1161;

  String hex=Integer.toHexString(1161);
   hex="0"+hex;

  char firstByte = (char) (Integer.parseInt(hex.substring(0,2),16));
  char secondByte = (char) (Integer.parseInt(hex.substring(2,4),16));

和程序的输出 第一个字节 - 一些矩形形状 第二个字节 - ?

我期待ascii代码 第一个字节 - EOT 第二个字节 - ‰

有人可以帮助我如何实现这一目标?

3 个答案:

答案 0 :(得分:1)

你打算以一种有点复杂的方式跟进:

String hex = String.format("%04x", s); // delivering 0489

第一个字节是0x04 = 4,ASCII控制字符,Ctrl-D或EOT。

第二个字节是89,实际上超出了7bit ASCII范围。取决于可能是promil符号的编码,但在Unicode中,将是具有对齐的选项卡的Unicode控制字符。

答案 1 :(得分:0)

您应该尝试以下代码...

    int s = 1161;

    String hex = Integer.toHexString(s);
    // hex="0"+hex;

    char firstByte = (char) (Integer.parseInt(hex.substring(0, 2), 16));
    char secondByte = (char) (Integer.parseInt(hex.substring(2, 3), 16));

    System.out.println("First = " + firstByte + ", Second = " + secondByte + ", Hex " + hex);

<强>输出

First = H, Second =     , Hex 489

答案 2 :(得分:0)

使用更可靠的输入测试您的功能。像EOT这样的控制字符可以用正方形或任何其他类型的占位符表示。高于127的任何东西都不是在ascii中唯一定义的,所以它可能只显示为&#34;?&#34;。在我看来你的功能正常。

有关所有明确定义的ascii符号,请参阅http://en.wikipedia.org/wiki/Ascii