-1

我有一个要求,我必须为字符串打印 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第二个字节--‰</p>

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

4

3 回答 3

1

您打算以一种有点复杂的方式进行以下操作:

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

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

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

于 2012-05-13T08:45:27.333 回答
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
于 2012-05-13T08:35:50.380 回答
0

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

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

于 2012-05-13T08:43:02.127 回答