我有要求我必须打印一个字符串的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 第二个字节 - ‰
有人可以帮助我如何实现这一目标?
答案 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。