Java十六进制velue转换为ASCII并返回十六进制出错

时间:2018-06-27 13:49:44

标签: java char hex ascii

我做了一个小项目,将十六进制字符串转换为ASCII字符串。当我转换te值时,我将其发送给客户端。但是我的客户没有核对价值。

我搜索了原因,然后发现当我将ASCII字符串转换回十六进制时,我又得到了一点差值..所以我认为当我发送数据时出现了问题..但我没有没有办法解决我的问题..

我还尝试先将十六进制转换为dec,然后转换为ascii,我也尝试了更多的菜鸟,请仅发送一个带有以下命令的命令:

char p = 3;
char d = 4;

bw3.write(p + "" + c + ""); 

这就是我现在得到的代码:

  ServerSocket welcomeSocket2 = new ServerSocket(9999);
   Socket socket2 = welcomeSocket2.accept();  
   OutputStream os3 = socket2.getOutputStream();
   OutputStreamWriter osw3 = new OutputStreamWriter(os3);
   BufferedWriter bw3 = new BufferedWriter(osw3);




 String hex4 = "00383700177a0102081c4200000000000001a999c338030201000a080000000000000000184802000007080444544235508001000002080104";

   StringBuilder output4 = new StringBuilder();
   for (int i =0; i< hex4.length(); i +=2){
       String str4 = hex4.substring(i, i+2);
       int outputdecimal = Integer.parseInt(str4,16);
       char hexchar = (char)outputdecimal;
       System.out.println(str4);
       output4.append(hexchar);
   }

  bw3.write(output4.toString());
   bw3.flush();

我还注意到,当我发送只有4个字节长或10个字节的命令时,一切都很好。我收到的转换后的ASCII代码很好。我现在想发送的命令长58个字节。

1 个答案:

答案 0 :(得分:0)

ASCII无法代表十六进制表示的所有可能数据。

因此,只要您尝试将六进制转换为ASCII,您尝试的任何方法都将无效。

您的十六进制包含纯二进制,计算机不透明的数据。 ASCII是用来表示文本的内容。有些二进制数据由ASCII组成,因此可以用ASCII表示。除这些数据外,还有其他所有数据。当您尝试将十六进制转换为ASCII时,这些将始终以错误结尾。这仅仅是因为ASCII通过其确切含义就无法做到这一点。