在java中使用hex to ascii转换一些特殊字符

时间:2015-12-08 05:41:44

标签: java jsp

我有一个十六进制字符串,我将其转换为 ascii ,但结果会显示带有一些特殊字符的输出。

  

实际字符串= adsfads   输出字符串=adsfads���

String hex = "61647366616473000000";

StringBuilder output = new StringBuilder();
for (int i = 0; i < hex.length(); i+=2) {
    String str = hex.substring(i, i+2);
    int decimal = Integer.parseInt(str, 16);   
    output.append((char)decimal);
}

System.out.println(output);

3 个答案:

答案 0 :(得分:1)

你的代码很好。没有特别的字符显示。

再次检查您的代码。

关注此帖

Convert a String of Hex into ASCII in Java

public class Test8 {

    public static void main(String []args)
    {



    String hex = "61647366616473000000";

    StringBuilder output = new StringBuilder();
    for (int i = 0; i < hex.length(); i+=2) {
        String str = hex.substring(i, i+2);
        int decimal = Integer.parseInt(str, 16);   
        output.append((char)decimal);
       // System.out.println("\n");
        //output.append((char)Integer.parseInt(str, 16));
    }

    System.out.println(output);

    }
}

答案 1 :(得分:0)

0x00不是可打印的ascii字符。

来自ascii-code.com: “ASCII表格中的前32个字符是不可打印的控制代码,用于控制打印机等外围设备。”

顺便说一下,你的代码似乎很好。

答案 2 :(得分:0)

您的ASCII包含一些不可打印的字符,这就是导致问题的原因。如果您查看字符串的十六进制值&#34; adsfads&#34;等于61647366616473,你已经拍摄了&#34; 61647366616473000000&#34;,这里最后&#34; 000000&#34;不可打印的字符。如果你将从你的字符串中删除那些零,那么你将得到你的代码所需的结果。或者你也可以从字符串中替换不可打印的字符以获得适当的结果。或者你可以编写代码来检查是否ascii char不可打印,然后为其指定一些值,

public static boolean isAsciiPrintable(char ch) {
      if(ch >= 32 && ch < 127)
      {
        return true;
      }
      else
     //return false and do the stuff in calling method.
  }

您还可以修改现有代码以获得所需的输出,如下所示

String hex = "61647366616473000000";
        StringBuilder output = new StringBuilder();
        for (int i = 0; i < hex.length(); i += 2) {
            String str = hex.substring(i, i + 2);
            int decimal = Integer.parseInt(str, 16);
            output.append((char) decimal);
        }
        System.out.println("YourText" + output.toString().replaceAll("\\p{C}", ""));

可能有一些不可见的空白字符(如0x0200B),它们是\ p {Zs}组的一部分,它也包含空格。如果你试图过滤不应该包含任何空格的输入字符串,则字符串replaceAll(&#34; [\ p {C} \ p {Z}]&#34;,&#34;&# 34;)将起作用。